我有这段代码。 select元素更改后,用于更新表单。 onChange进行了一个“ ajax”调用,这部分代码负责响应。
第一次,一切正常。但是,dojo.parser.parse大约50%的时间都无法返回。
一开始它看起来像这样:
var targetNode = dojo.byId(node);
targetNode.innerHTML = data;
dojo.parser.parse(targetNode);
然后,我阅读了一些有关现有对象的信息。所以我认为也许销毁它们会有所帮助:
if(dojo.byId(node)) dojo.destroy(node);
dojo.create('div', { id: node }, afternode, 'after');
var targetNode = dojo.byId(node);
targetNode.innerHTML = data;
dojo.parser.parse(targetNode);
那没有任何帮助。 h3ll发生了什么?有时它解析一些元素。这是dojo.parser的已知问题吗?
最佳答案
如果您以声明方式创建dijit,并使用dojo.parser.parse
即时解析它们,并指定了dijit的ID,则一旦您两次解析了相同的HTML片段,就会收到一条错误消息,指出dijit的ID已被注册。
<div dojoType="dijit.form.Button" id="myButton" />
原因是dijits尚未被销毁,您无法重复使用ID。如果在声明ID时未指定ID,则不会收到此错误,但实际上会发生内存泄漏。
正确的方法是在再次解析HTML片段之前销毁dijits。
dijit.parser.parse
的返回值是一个数组列表,其中包含从HTML片段解析的所有dijit的引用。您可以保留列表,然后先销毁dijits。if (dijits) {
for (var i = 0, n = dijits.length; i < n; i++) {
dijits[i].destroyRecursive();
}
}
dijits = dojo.parser.parse(targetNode);
关于javascript - dojo.parser.parse并不总是返回,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3212823/