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

标签 javascript dojo

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

相关文章:

javascript - 通过单击外部关闭 Dojo 对话框

javascript - React.js 异步操作 setState 返回 null

javascript - 密码保护html页面

html - 使用 dojo/html/css 实现搜索栏/按钮?

dojo - 第 1 页上的复选框 "ticked"反射(reflect)在 EnhancedGrid 的第 2 页中

javascript - Episerver中通过AJAX请求更新后刷新页面

javascript - 滚动到 ID 减去一些像素

javascript - 正则表达式正在捕获整个字符串

javascript - 变量作用域上的简单点 - Javascript

javascript - 为什么这些 Dojo 悬停事件不起作用?