动态内容加载 - HTML5没问题,Dojo不行

时间:2016-04-21 04:34:44

标签: parsing dynamic dojo digit

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

问题似乎是动态DIV中包含的DIJIT小部件不是DIJIT小部件,而是普通的HTML小部件。也就是说,我可以使用“dojo.byId('widgetID')”并使用标准JavaScript来处理它们,但如果我尝试“注册表('widgetID')”,我会得到一个“未定义”的响应。

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

1 个答案:

答案 0 :(得分:1)

在将标记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
  });
});