Это связано с тем, что виджеты во фрагменте HTML, возвращенном с сервера, должны быть проанализированы в первую очередь, прежде чем их можно будет отобразить на странице.На главной странице у вас, вероятно, есть код, подобный приведенному ниже:
<script type="text/javascript" src="../javascripts/dojo1.6/dojo/dojo.js"
djConfig="parseOnLoad: true"></script>
Конфигурация parseOnLoad: true
означает, что dojo автоматически анализирует всю страницу после загрузки страницы.Это не так, когда вы используете XHR для получения другого HTML-фрагмента с сервера.В этом случае вам необходимо проанализировать виджеты вручную.
Используйте функцию dojo.parse.parse
для анализа дерева узлов DOM.Поэтому вам нужно вызвать эту функцию после добавления фрагмента HTML на страницу.Например,
$('#ajax-content').html(html);
dojo.parser.parse(dojo.byId('ajax-content'));
Одна вещь, которую вам нужно отметить, это убедиться, что виджеты были уничтожены до того, как страница обновится снова, чтобы избежать утечки памяти.dojo.parser.parse
функция возвращает массив объекта всех проанализированных виджетов.Поэтому перед повторным обновлением страницы вы можете выполнить итерацию этого массива и уничтожить эти виджеты.
//Save the last parsed result
var widgets = dojo.parse.parse();
//Before update
if (widgets) {
widgets.forEach(function(widget) {
widget.destroyRecursive();
});
}