我试图为即将推出的项目选择一个JS模板引擎,并且我的最爱之一似乎是dust.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指出你的(删除)答案。
删除,因为我意识到这不是一个回答您的问题:)无论如何,你不能强迫一个异步函数要准备好fnRowCallback'完成之前',所以如果这是一个真正的问题我不知道认为Dust.js是可用的。 – robertklep 2013-04-09 18:40:43
是的,我注意到 - 谢谢你试图帮助,但! :)是的 - 这就是我所担心的 - 有些图书馆希望你从同步回调中返回(或者做某件事),而dust.js可能不会和他们一起玩:( – kgr 2013-04-09 19:11:22