动态内容加载 - 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
});
});
我遇到这样一种情况,我正在从具有 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
});
});