dojo.parser.parse并不总是返回

时间:2010-07-09 13:06:04

标签: javascript dojo

我有这段代码。它用于在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的已知问题吗?

1 个答案:

答案 0 :(得分:4)

如果你以声明方式创建dijits并使用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的引用。您可以保留列表并首先销毁dijits。

if (dijits) {
  for (var i = 0, n = dijits.length; i < n; i++) {
      dijits[i].destroyRecursive();
  }
}
dijits = dojo.parser.parse(targetNode);