içine (bir atama olmadan) sol ve üçlü dönüştürme Ben Krasimir tarafından inşa mükemmel JavaScript çiftleşmiş motoru, buldum, ben sadece ne ihtiyaç vardır.
Odaklama motoru harika çalışıyor ancak doğal olarak bu konuda hackleme isteğine karşı koyamıyorum ve hatta birkaç özellik ekleyemiyorum.
Maalesef kodun bazılarını anlamakta sorun yaşıyorum. İşte JavaScript çiftleşmiş motoru - koşullu deyimi (ler)
var TemplateEngine = function(html, options) {
var re = /<%([^%>]+)?%>/g,
reExp = /(^()?(if|for|else|switch|case|break|{|}))(.*)?/g,
code = 'var r=[];\n',
cursor = 0,
match;
var add = function(line, js) {
/* --begin problem */
js ? (code += line.match(reExp) ? line + '\n' : 'r.push(' + line + ');\n') : (code += line != '' ? 'r.push("' + line.replace(/"/g, '\\"') + '");\n' : '');
/* --end problem */
return add;
};
while (match = re.exec(html)) {
add(html.slice(cursor, match.index))(match[1], true);
cursor = match.index + match[0].length;
}
add(html.substr(cursor, html.length - cursor));
code += 'return r.join("");';
return new Function(code.replace(/[\r\t\n]/g, '')).apply(options);
};
anlamıyorum çizgidir: Burada
kodudur
js ? (code += line.match(reExp) ? line + '\n' : 'r.push(' + line + ');\n') : (code += line != '' ? 'r.push("' + line.replace(/"/g, '\\"') + '");\n' : '');
Ben JavaScript için yeni değilim ama bu bazı garip görünümlü kod ve ne geliyor Sol el ödevi olmayan bir üçlü operatör olduğunu biliyorum (yanılıyorsam beni düzelt)
Yazarın ne yaptığını daha iyi anlamak için, üçlü operatörün koşullu ifadelere dönüştürülmesi.
if(js) {
if(code += line.match(reExp)) {
line += '\n';
} else {
line += 'r.push(' + line + ');\n';
}
} else {
if(code += line !== '') {
line += 'r.push("' + line.replace(/"/g, '\\"') + '");\n';
} else {
line += "";
}
}
Bu başarısız oldu ve hata "Yakalanmayan SyntaxError: Beklenmedik belirteç" attı:
herkes beni koşullu ifadeleri bu kodu dönüştürmek ve hatta belki yardımcı olabilir
Bu
Bugüne kadar ne var Kodun ne yaptığı konusunda bana bir açıklama yapalım?Ayrıca, IE8'in bu kodu destekleyip desteklemediğini merak ettim mi?
NOT: IE8 desteğine aldırış etmiyorum Bu şablon altyapısının IE8'i destekleyip desteklemediğini bilmek istiyorum.
Bu durumda sadece C'deki gibi JavaScript Krasimir en Website veya Krasimir en Github
Alternatif kodunuzda bir sözdizimi hatası yok. Bu hatayı alıyorsanız, başka bir yerden geliyor. – Pointy
@Pointy Evet, düşündüğüm de bu ve şablon kodunun sözdizimi hatası içermediğinden% 100 olumlu olduğumdan, aynı kodu örnekte kullandığımdan dolayı, belki de yanlış bir şeyleri yanlış anlamışımdır? –