作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有这段代码。它用于在选择元素更改后更新表单。 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);
这没有任何帮助。这到底是怎么回事?有时它会解析一些元素。这是 dojo.parser 的已知问题吗?
最佳答案
如果您以声明方式创建 dijit 并使用 dojo.parser.parse
即时解析它们并指定 dijit 的 ID,一旦您两次解析相同的 HTML 片段,您'会收到一条错误消息,指出 dijit 的 ID 已被注册。
<div dojoType="dijit.form.Button" id="myButton" />
原因是dijits还没有被销毁,你不能重用这个ID。如果你在声明的时候不指定ID,你不会得到这个错误,但你实际上有内存泄漏。
正确的方法是在再次解析 HTML 片段之前销毁 dijits。 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/
我是一名优秀的程序员,十分优秀!