我試圖爲即將推出的項目選擇一個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