基于DOM树的JavaScript模板引擎
我正在寻找一个新的Javascript模板引擎来替换旧的jQuery模板,以满足我的客户端模板需求。
我更喜欢模板引擎处理DOM树而不是文本字符串的方法,然后将cooked字符串的内容转储到innerHTML
。 这是更好的性能,我发现DOM操作更适合构建更多DOM树的方法。
我对Javascript模板引擎有什么选择,它会直接创建DOM树而不是基于文本的引擎? 我喜欢Mustache.js的无逻辑方法,但似乎只对字符串进行操作。 原生jQuery集成也是一个很好的function。
透明度:
https://github.com/leonidas/transparency/
纯:
http://beebole.com/pure/documentation/
板
https://github.com/flatiron/plates
为什么这一切:
soma-template是一个新的。
纯DOM操作,许多function,自然语法,可与其他库完全扩展,如underscore.string,带参数的函数调用,帮助程序,观察者。 如果需要,只能更新某些节点的能力,DOM本身内部的模板。
这是关于7个着名JS模板引擎的良好比较: http : //blog.stevensanderson.com/2012/08/01/rich-javascript-applications-the-seven-frameworks-throne-of-js-2012/
我最近创建了受PURE和Transparency启发的DOM模板引擎。
它支持循环,条件等等。
看一下doc: http : //code.meta-platform.com/metajs/components/template/
不要害怕MetaJS是大型库,模板库可以单独使用。
简短的例子:
HTML:
-
定义模板:
var tpl = Meta.Template(document.getElementById('tpl'), { "ul#tasks li": $__repeat("tasks", { ".task": "task", ".due-date": $__date("dm Y", "due_date"), "@": $__attrIf("completed", "complete") }) });
渲染模板:
tpl({ tasks: [ { task: "Write concept", due_date: new Date(2015, 3, 22, 0, 0, 0, 0), complete: true }, { task: "Consult with customer", due_date: new Date(2015, 3, 25, 0, 0, 0, 0), complete: false } ] });
结果:
- Write concept 22. 3. 2015
- Consult with customer 25. 3. 2015
看看Monkberry DOM模板引擎吧 。
它非常小(只有1,5kB gzip),无依赖库,服务器编译,单向数据绑定,而且速度非常快!
这里是模板和生成代码的示例:
{{ title }}
{{ text }}
会产生:
var div = document.createElement('div'); var h1 = document.createElement('h1'); var p = document.createElement('p'); div.appendChild(h1); div.appendChild(p); ... view.update = function (data) { h1.textContent = data.title; p.textContent = data.text; };
Monkberry支持if
, for
和custom标签。 并且有很多渲染优化。 可以使用webpack
, webpack
或cli
在服务器上呈现模板。
- monkberry.js.org
dna.js是一个克隆DOM元素的模板引擎( dnajs.org )。
书籍的示例模板:
Featured Books
Title: {{title}} Author: {{author}}
调用将模板的副本插入DOM:
dna.clone('book', { title: 'The DOM', author: 'Jan' });
结果HTML:
Featured Books
Title: The DOM Author: Jan
您可以使用的示例待办事项应用程序 :
http://jsfiddle.net/wo6og0z8
dna.js的创建正是为了避免构造和传递字符串模板(我是项目维护者)。
你在寻找什么样的糖? 原始DOM api对我来说总是很好。 如果你真的采用了这个想法,模板引擎在性能方面不好,如果你想有效地构建一个DOM树,不要使用innerHTML。 我倾向于使用document.createElement手动创建元素。 我的模板是通过编写辅助函数来创建的,这些函数创建节点集合并通过设置.innerText属性用数据填充它们。 然后我可以缓存对我希望经常引用的节点的引用,这样我就不必遍历DOM树来再次找到这些节点。