Я пытаюсь выбрать механизм шаблона 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
, или, может быть, я не вижу здесь ничего очевидного?
Любая помощь или понимание или совет были бы очень желанными. Спасибо! :)
EDIT:
Этот вопрос не о том, как сделать шаблон, но о том, как убедиться, что он оказывается перед fnRowCallback
отделки. Спасибо @robertklep за то, что указали это на ваш (удаленный) ответ.
Исключено, потому что я понял, что это был не ответ на ваш вопрос :) Во всяком случае, вы не можете заставить асинхронную функцию, чтобы быть готов до 'финиширует fnRowCallback', так что если это действительно проблема, я не думаю, Dust.js можно использовать. – robertklep
Да, я заметил - спасибо за попытку помочь! :) И да - это то, о чем я беспокоился - есть некоторые библиотеки, которые ожидают, что вы вернетесь (или сделаете) что-то от синхронного обратного вызова, и dust.js могут не играть с ними слишком хорошо :( – kgr