在解析AJAX加载的表格中的复选框时出现错误,但出现错误,说明该小部件具有该ID已被注册:
“Error('Tried to注册部件与id == userListUncheckAll但该ID已注册')“在AJAX加载的内容上解析dojoType
而我猜这发生的原因是我们拿出当前表,然后用我们从AJAX调用返回的东西取代它,并且因此元素ID将是相同的。有没有办法“注销”小部件或类似的东西?
在解析AJAX加载的表格中的复选框时出现错误,但出现错误,说明该小部件具有该ID已被注册:
“Error('Tried to注册部件与id == userListUncheckAll但该ID已注册')“在AJAX加载的内容上解析dojoType
而我猜这发生的原因是我们拿出当前表,然后用我们从AJAX调用返回的东西取代它,并且因此元素ID将是相同的。有没有办法“注销”小部件或类似的东西?
我找到了答案,这个我自己,所以我把它放在这里为他人:
如果你有一组ID的,你知道将需要“未注册”,创建ID的数组名称:
try {
dojo.parser.parse();
} catch (e) {
var ids = ['id1', 'id2', 'id3'];
dijit.registry.forEach(function(widget) {
//remove this check if you want to unregister all widgets
if (dojo.indexOf(ids, id) {
widget.destroyRecursive();
}
});
dojo.parser.parse();
}
工程就像一个魅力。
获取您要插入AJAX内容的父节点并仅解析此节点。你会得到这个错误,因为DOM中的其他小部件会被解析两次。像这样:
require(["dojo/dom", "dojo/parser", "dojo/_base/xhr"/*, etc */ ],
function(dom, parser, xhr) {
var request = xhr.get({
// your details here
});
request.then(function(data) {
// transform data if necessary
var parentNode = dom.byId("/* parent id */");
parentNode.innerHTML = data;
// This is where the widgets get built!
parser.parse(parentNode); // or parser.parse("/* parent id */");
}, function(err) {
// handle error
});
});
此外,请确保您包含正确的dojo/dijit模块。一个常见的错误是忘记包含您试图插入的小部件的模块。例如,如果您使用TabContainer,请将“dijit/layout/TabContainer”添加到所需模块的列表中。
内Dojo Parser文档包含此一小段代码片段:
dojo.xhrGet({
url: "widgets.html",
load: function(data){
dojo.byId("container").innerHTML = data;
dojo.parser.parse("container");
}
})
我在我的代码应用和工作正常。
这太疯狂了!这应该是Dojo/Dijit 101和文档。我的意思是有一个JS框架的全部意义是做花式的AJAX事情。如果返回的页面不能渲染它是Dijits,那么有什么意义呢?!?! – Sevenearths 2011-09-05 11:22:56