我正在尝试为即将到来的项目选择一个 JS 模板引擎,而我最喜欢的一个似乎是dust.js。
我喜欢它是异步的想法,即我只是为渲染准备一些模板,当它准备好时,回调将渲染的 HTML 插入到 DOM 中。
但是我不确定如何解决同步回调中的异步渲染问题。例如 - 我经常使用DataTables插件,它提供了一些回调,允许我在实际插入 DOM 节点之前修改它们。
为了说明这个问题 - 让我们假设我有一个以下片段(从DataTables website获取和修改):
$(document).ready( function() {
$('#example').dataTable( {
"fnRowCallback": function( nRow, aData, iDisplayIndex, iDisplayIndexFull ) {
// modify the node before it's actually inserted into the document
$('td:eq(4)', nRow).html( '<b>' + aData[4] + '</b>' );
}
} );
} );
现在-我想摆脱'<b>' + aData[4] + '</b>'
并使用带有某些上下文的模板来代替(这是一个微不足道的示例,但显示了问题)。
如果我理解正确,我不能强制dust.js
同步渲染模板,因此可能会发生未处理的节点将被插入到文档中(用户会看到它未处理),然后在dust.js
实际渲染模板时,该节点将被修改.
从用户的角度来看,这显然看起来不太好。
那么真的是这种情况(dust.js
不能强制同步),如果是的话 - 如何应对?我应该使用同步引擎吗,handlebars
或者mustache
我在这里看不到明显的东西?
非常欢迎任何帮助、见解或建议。谢谢!:)
编辑:
这个问题不是关于如何渲染模板,而是关于如何确保它在fnRowCallback
完成之前被渲染。感谢@robertklep 用您的(已删除)答案指出这一点。