我遇到的情况是我从带有dojo.xhrGet的服务器动态加载DIV。一切都很好。内容恢复正常,DIV插入到页面中。请注意,在这种情况下,我无法在发生其他事件之前知道要加载的DIV。
问题似乎是动态DIV中包含的DIJIT小部件不是DIJIT小部件,而是普通的HTML小部件。也就是说,我可以使用“dojo.byId('widgetID')”并使用标准JavaScript来处理它们,但如果我尝试“注册表('widgetID')”,我会得到一个“未定义”的响应。
如何将动态加载和其他声明性DIV代码解析为真正的DIJIT小部件?
答案 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
});
});