Динамическая загрузка контента - 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
  });
});
Другие вопросы по тегам