ich die perfekt JavaScript-Template-Engine, gebaut von Krasimir gefunden habe, es ist genau das, was ich brauchte.
Die Templating-Engine funktioniert super, aber natürlich konnte ich dem Drang nicht widerstehen, ein bisschen zu hacken und vielleicht sogar ein paar Features hinzuzufügen.
Leider habe ich Probleme, etwas von dem Code zu verstehen. Hier
JavaScript Template-Engine - Konvertieren linke ternäre (ohne Zuordnung) in bedingte Anweisung (en)
ist der Code:
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);
};
Hier ist die Linie, die ich nicht verstehe:
js ? (code += line.match(reExp) ? line + '\n' : 'r.push(' + line + ');\n') : (code += line != '' ? 'r.push("' + line.replace(/"/g, '\\"') + '");\n' : '');
ich JavaScript nicht neu bin, aber das ist etwas seltsam aussehende Code und von dem, was Ich weiß, dass es ein ternärer Operator ohne eine linke Hand ist (korrigiere mich, wenn ich falsch liege)
Also, um ein besseres Verständnis zu bekommen, was der Autor tat, habe ich versucht, das zu konvertieren ternärer Operator in bedingte Anweisungen.
Dies ist, was ich bisher:
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 += "";
}
}
Dies scheiterte und warf den Fehler „Nicht abgefangene Syntaxerror: unerwartetes Token, wenn“
mir jemand diesen Code in bedingten Anweisungen Kann helfen, konvertieren und vielleicht sogar gib mir eine Erklärung, was der Code tut?
Auch aus Neugier könnte mir jemand sagen, ob IE8 diesen Code unterstützt?
HINWEIS: Ich habe keine Bedenken IE8-Unterstützung Ich möchte nur wissen, ob diese Templating-Engine IE8 unterstützt.
Sie können die Template-Engine auf Krasimir finden Website oder Krasimir der Github
Ihr alternativer Code weist keinen Syntaxfehler auf. Wenn Sie diesen Fehler bekommen, kommt er von woanders her. – Pointy
@Pointy Ja, das ist, was ich dachte, und ich bin auch 100% positiv, dass der Template-Code auch keinen Syntaxfehler hat, weil ich den gleichen Code aus dem Beispiel verwendet habe, vielleicht habe ich etwas falsch in der Aussage bekommen? –