我有这段代码。它用于在选择元素更改后更新表单。 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" />
原因是 dijit 尚未销毁,无法重用该 ID。如果声明时不指定ID,则不会出现此错误,但实际上会出现内存泄漏。
正确的方法是在再次解析 HTML 片段之前销毁 dijit。 dijit.parser.parse 的返回值是一个数组列表,其中包含从 HTML 片段解析的所有 dijit 的引用。您可以保留该列表并先销毁 dijit。
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/