我正在寻找一个新的Javascript模板引擎来替换旧的jQuery模板以满足我的客户端模板需求。
我更喜欢模板引擎处理DOM树而不是文本字符串的方法,然后将熟字符串的内容转储到innerHTML
。这是更好的性能,我发现DOM操作更适合构建更多DOM树的方法。
我有哪些选项可以直接创建DOM树而不是基于文本的引擎的Javascript模板引擎?我喜欢Mustache.js的无逻辑方法,但似乎只对字符串进行操作。原生jQuery集成也是一个不错的功能。
答案 0 :(得分:11)
透明度:
https://github.com/leonidas/transparency/
PURE:
http://beebole.com/pure/documentation/
板
https://github.com/flatiron/plates
为什么这一切:
答案 1 :(得分:4)
答案 2 :(得分:2)
soma-template是一个新的。
纯DOM操作,许多功能,自然语法,可与其他库完全扩展,如underscore.string,带参数的函数调用,助手,观察者。如果需要,只能更新一些节点的能力,DOM本身内部的模板。
答案 3 :(得分:1)
这是关于7个着名JS模板引擎的良好比较:http://blog.stevensanderson.com/2012/08/01/rich-javascript-applications-the-seven-frameworks-throne-of-js-2012/
答案 4 :(得分:1)
我最近创建了受PURE和透明度启发的DOM模板引擎。
它支持循环,条件等等。
查看doc:http://code.meta-platform.com/metajs/components/template/
不要害怕MetaJS是大型库,模板库可以单独使用。
简短的例子:
HTML:
<div id="tpl">
<ul id="tasks">
<li>
<span class="task"></span>
<span class="due-date"></span>
</li>
</ul>
</div>
定义模板:
var tpl = Meta.Template(document.getElementById('tpl'), {
"ul#tasks li": $__repeat("tasks", {
".task": "task",
".due-date": $__date("d. m. 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
}
]
});
结果:
<div id="tpl">
<ul id="tasks">
<li>
<span class="task" completed>Write concept</span>
<span class="due-date">22. 3. 2015</span>
</li>
<li>
<span class="task">Consult with customer</span>
<span class="due-date">25. 3. 2015</span>
</li>
</ul>
</div>
答案 5 :(得分:1)
看看Monkberry DOM template engine。
它非常小(只有1.5kB gzip),无依赖库,服务器编译,单向数据绑定,而且速度非常快!
这里是模板和生成代码的示例:
<div>
<h1>{{ title }}</h1>
<p>
{{ text }}
</p>
</div>
将生成:
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
和自定义标记。并且有很多渲染优化。
可以使用webpack
,browserify
或cli
在服务器上呈现模板。
答案 6 :(得分:1)
dna.js 是一个克隆DOM元素(https://dnajs.org)的模板引擎。
书籍的示例模板:
#FIG 3.2
Landscape
Center
Inches
Letter
200.00
Single
-3
1200 2
6 8625 825 11775 7275
6 8625 1125 9075 3975
6 8625 1125 9075 2175
6 8625 1125 9075 1575
2 1 0 3 0 7 0 0 -1 0.000 1 0 -1 0 0 2
8700 1200 9000 1200
2 1 0 3 0 7 0 0 -1 0.000 1 0 -1 0 0 2
8700 1500 9000 1500
-6
6 8625 1725 9075 2175
2 1 0 3 0 7 0 0 -1 0.000 1 0 -1 0 0 2
8700 1800 9000 1800
2 1 0 3 0 7 0 0 -1 0.000 1 0 -1 0 0 2
8700 2100 9000 2100
...
4 0 0 0 0 0 20 0.0000 4 195 1080 35100 19800 Z-80 PIO\001
4 0 0 0 0 0 15 0.0000 4 180 930 34575 21075 CTL/DAT\001
4 0 0 0 0 0 15 0.0000 4 180 795 34575 21375 B/A SEL\001
4 0 0 0 0 0 15 0.0000 4 150 270 34575 21975 A6\001
4 0 0 0 0 0 15 0.0000 4 150 270 34575 22275 A5\001
4 0 0 0 0 0 15 0.0000 4 150 480 34575 22875 GND\001
4 0 0 0 0 0 15 0.0000 4 150 270 34575 24075 A0\001
4 0 0 0 0 0 15 0.0000 4 150 600 34575 24375 A STB\001
4 0 0 0 0 0 15 0.0000 4 150 570 34575 24675 B STB\001
4 0 0 0 0 0 15 0.0000 4 150 240 36525 21975 B6\001
调用将模板的副本插入DOM:
<h1>Featured Books</h1>
<div id=book class=dna-template>
<div>Title: <span>{{title}}</span></div>
<div>Author: <cite>{{author}}</cite></div>
</div>
结果HTML:
dna.clone('book', { title: 'The DOM', author: 'Jan' });
提供样本“待办事项”:
https://jsfiddle.net/uLrc7kmp
创建dna.js是为了避免构造和传递字符串模板(我是project维护者)。
答案 7 :(得分:0)
你在寻找什么样的糖?原始的DOM api对我来说总是很好。如果你真的采用了这个想法,即模板引擎在性能方面不好,如果你想有效地构建一个DOM树,不要使用innerHTML。我倾向于使用document.createElement手动创建元素。我的模板是通过编写辅助函数来创建的,这些函数创建节点集合并通过设置.innerText属性用数据填充它们。然后我可以缓存对我希望经常引用的节点的引用,这样我就不必遍历DOM树来再次找到这些节点。
答案 8 :(得分:0)
具有超级功能的免费MIT许可https://drupal.stackexchange.com/(您可以将更改的数据重新应用到相同的HTML结构中,以在任何数据更改时更新UI ...)