动态内容加载 - HTML5 可以,Dojo 不行

Dynamic Content Loading - HTML5 is OK, Dojo is not

我遇到这样一种情况,我正在从具有 dojo.xhrGet 的服务器动态加载 DIV。一切都很好。内容返回正常,DIV 插入页面正常。请注意,在这种情况下,我无法知道要在其他事件发生之前加载 DIV。

问题似乎是动态 DIV 中包含的 DIJIT 小部件不是 DIJIT 小部件,而是 运行-of-the-mill HTML 小部件。也就是说,我可以使用 "dojo.byId('widgetID')" 和标准 JavaScript 处理它们,但如果我尝试 "registry('widgetID')",我会得到 "undefined" 响应。

如何获取动态加载和声明性 DIV 代码以解析为真正的 DIJIT 小部件?

在标记 div 加载到 DOM 后,您需要使用 dojo/parser。 函数 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
  });
});