基于DOM树的JavaScript模板引擎

我正在寻找一个新的Javascript模板引擎来替换旧的jQuery模板,以满足我的客户端模板需求。

我更喜欢模板引擎处理DOM树而不是文本字符串的方法,然后将cooked字符串的内容转储到innerHTML 。 这是更好的性能,我发现DOM操作更适合构建更多DOM树的方法。

我对Javascript模板引擎有什么选择,它会直接创建DOM树而不是基于文本的引擎? 我喜欢Mustache.js的无逻辑方法,但似乎只对字符串进行操作。 原生jQuery集成也是一个很好的function。

soma-template是一个新的。

纯DOM操作,许多function,自然语法,可与其他库完全扩展,如underscore.string,带参数的函数调用,帮助程序,观察者。 如果需要,只能更新某些节点的能力,DOM本身内部的模板。

http://soundstep.github.com/soma-template/

这是关于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模板引擎吧 。 Monkberry JavaScript 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支持iffor和custom标签。 并且有很多渲染优化。 可以使用webpackwebpackcli在服务器上呈现模板。

  • 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树来再次找到这些节点。