我一直在研究 JavaScript 模板库,如dust.js 和其他更广泛的库,如 canJS
在我工作的地方,我们在客户端完成了近 99% 的任何应用程序/站点。目前我只是构建html字符串,注入dom,监听点击/动作,做ajax,从结果中构建更多的html字符串并注入dom等等。
如果你举这个简单的例子。
//stringbuilder
function StringBuilder(e){this.strings=new Array("");this.append(e)}StringBuilder.prototype.append=function(e){if(e){this.strings.push(e)}};StringBuilder.prototype.clear=function(){this.strings.length=1};StringBuilder.prototype.toString=function(){return this.strings.join("")}
var data = {
fname: "Joe",
lname: "Doe",
occupation: "Developer",
things: ["some", "list", "of", "things"]
}
var sb = new StringBuilder();
sb.append("<h1>" + data.fname + " " + data.lname + "</h1>");
sb.append("<p>Occupation: " + data.occupation + "</p>");
sb.append("<h3>A list of things</h3>");
sb.append("<ul>");
for (var i = 0; i < data.things.length; i++) {
sb.append("<li>" + data.things[i] + "</li>");
}
sb.append("</ul>");
$("#output").html(sb.toString());
通过模板可以通过什么方式改进?从我所见,我将不得不适应一种特定的模板语法,这种语法并不比上述更容易阅读或维护。复杂的布局,或者你有递归的场景(列表中的列表不知道它可能有多少层)呢?我觉得模板语法/引擎在某些情况下可能是一个限制因素。
我想将 html 完全从 JS 中提取出来是很好的,但是可以说在 HTML 中使用带有模板语法的脚本标签是不可能的,我并不特别希望模板作为外部文件,我需要执行额外的请求读。
请教育我!