【发布时间】:2013-04-01 05:52:55
【问题描述】:
我正在尝试为即将到来的项目选择一个 JS 模板引擎,而我最喜欢的一个似乎是dust.js。
我喜欢它是异步的想法,即我只是暂存一些模板进行渲染,当它准备好时,回调将渲染的 HTML 插入到 DOM 中。
我不确定如何解决同步回调中的异步渲染问题。例如 - 我经常使用DataTables 插件,它提供了一些回调,允许我在实际插入 DOM 节点之前对其进行修改。
为了说明问题 - 假设我有以下 sn-p(取自 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 用您的(已删除)答案指出这一点。
【问题讨论】:
-
已删除,因为我意识到这不是您问题的答案 :) 无论如何,您不能强制异步函数在
fnRowCallback完成之前准备好,所以如果这真的是一个问题,我不会'认为 Dust.js 不可用。 -
是的,我注意到了 - 感谢您的帮助! :) 是的 - 这就是我担心的 - 有一些库希望你从同步回调中返回(或做)某些事情,而dust.js 可能无法很好地与它们配合使用:(
标签: javascript asynchronous callback dust.js