一、问题现象
<script type="text/html" id="man_template">{{each list as v i}}<tr><td>{{v.name}}</td><td>{{v.height}}</td><td>{{v.age}}</td></tr>{{/each}}
</script>
<script>var html=template("man_template",{list:[{name:'zhang',age:18,height:'180cm'}]});console.log(html);
</script>
输出:编译后完全没有信息
原因:{{each list as v i}}此行多了个空格
二、artTemplate解析器的坑
e.parser = function (a) {a = a.replace(/^\s/, "");var b = a.split(" "), c = b.shift(), e = b.join(" ");switch (c) {case"if":a = "if(" + e + "){";break;case"else":b = "if" === b.shift() ? " if(" + b.join(" ") + ")" : "", a = "}else" + b + "{";break;case"/if":a = "}";break;case"each":var f = b[0] || "$data", g = b[1] || "as", h = b[2] || "$value", i = b[3] || "$index", j = h + "," + i;"as" !== g && (f = "[]"), a = "$each(" + f + ",function(" + j + "){";break;case"/each":a = "});";break;case"echo":a = "print(" + e + ");";break;case"print":case"include":a = c + "(" + b.join(",") + ");";break;default:if (/^\s*\|\s*[\w\$]/.test(e)) {var k = !0;0 === a.indexOf("#") && (a = a.substr(1), k = !1);for (var l = 0, m = a.split("|"), n = m.length, o = m[l++]; n > l; l++) o = z(o, m[l]);a = (k ? "=" : "=#") + o} else a = d.helpers[c] ? "=#" + c + "(" + b.join(",") + ");" : "=" + a}return a}
以下此行只使用单一空白分隔编译模板语法,输入多空格将导致b数组含有空串。
var b = a.split(" "), c = b.shift(), e = b.join(" ");