gpt4 book ai didi

javascript - dojo.parser.parse 并不总是返回

转载 作者:行者123 更新时间:2023-11-29 18:35:53 24 4
gpt4 key购买 nike

我有这段代码。它用于在选择元素更改后更新表单。 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com