Динамическая загрузка контента - HTML5 в порядке, Dojo - нет
У меня возникла ситуация, когда я загружаю DIV динамически с сервера с помощью dojo.xhrGet. Все в порядке. Содержание возвращается в порядке, и DIV вставляется в страницу в порядке. Обратите внимание, что в этой ситуации я не могу знать DIV для загрузки до какого-либо другого события.
Кажется, проблема в том, что виджеты DIJIT, содержащиеся в динамических DIV, не являются виджетами DIJIT, а являются обычными виджетами HTML. То есть я могу работать с ними с помощью "dojo.byId('widgetID')" и использовать стандартный JavaScript, но если я попытаюсь "registry('widgetID')", я получу "неопределенный" ответ.
Как я могу получить динамически загружаемый и в противном случае декларативный код DIV для анализа в настоящие виджеты DIJIT?
1 ответ
Вам нужно использовать dojo/parser
после того, как ваша разметка div была загружена в вашу DOM. Функция parse()
преобразует вашу HTML-разметку из div в виджет dijit, если разметка была правильно оформлена.
Кстати dojo.xhrGet
устарела и вы должны использовать dojo/request/xhr
вместо.
Ниже и пример с некоторым псевдокодом:
require(["dojo/request/xhr", "dojo/dom-construct"], function(xhr, domConstruct){
xhr("example.json", {
handleAs: "text" // or whatever
}).then(function(data){
// place your div to the dom (data is an html markup similar to this <input data-dojo-type="dijit/form/TextBox" type="text" name="dept1" />)
var targetDom = 'targedDom';
domConstruct.place(data, targetDom, 'replace');
// trasform your div to a dijit widget
parser.parse(dojo.byId(targetDom)).then(function(){
// after is parsed do smt here
});
}, function(err){
// handle the error condition
}, function(evt){
// handle a progress event from the request if the browser supports XHR2
});
});