创建小部件时,我检查是否存在如下所示的div然后销毁内容&再次创造。
if (dijit.byId("TPContainer")) {
dijit.byId("TPContainer").destroyRecursive(true);
dojo.place('<div id="TPContainer"></div>',dojo.byId("TitleContainer"));
}
但在加载HTML模板之前
var container = dijit.byId("mainContainer");
container.destroyDescendants();
container.set("href", TemplateLink);
我刚刚从其他地方获取了代码。但不清楚这个概念。 我不知道何时使用Dojo可用的销毁功能。有人可以解释何时使用哪种破坏功能? &安培;是什么区别他们?
答案 0 :(得分:14)
查看Dojo api(目前为1.10)这些方法在_WidgetBase
中定义(虽然destroy来自dijit/Destroyable
)并由所有小部件继承。由于这些都埋没在api文档中,而不是写在_Widgetbase教程页面中,我会在这里列出它们。
在内部,销毁 Blah 方法为自己(适用时)和他们的孩子调用destroy
,这样这些函数就像简单的辅助方法一样,可以更容易地破坏东西。
参数: preserveDom
输入:布尔值
描述:如果为true,则此方法将单独保留原始DOM结构。注意:这不适用于_TemplatedMixin小部件
<强>要点:强>
销毁此小部件,但不销毁其后代。后代意味着 this.containerNode中的小部件。还会破坏任何资源 (包括小部件)通过this.own()注册。
此方法还会破坏内部窗口小部件,例如创建的窗口小部件 假设这些小部件存在于this.domNode中,从模板开始 但在this.containerNode之外。
对于2.0,它计划这种方法也会破坏后代 小部件,因此应用程序不应该依赖于当前的销毁能力 小部件没有破坏它的后代。一般他们应该使用 具有子项的小部件的destroyRecursive()。
参数: preserveDom
输入:布尔值
描述:(可选)如果为true,则preserveDom属性将传递给所有后代窗口小部件的.destroy()方法。不适用于_Templated小部件。
<强>要点:强>
递归地销毁这个小部件的子节点及其后代。
参数: preserveDom
输入:布尔值
描述:(可选)如果为true,则此方法将使原始DOM结构单独保留后代窗口小部件。注意:这不适用于dijit._TemplatedMixin小部件。
销毁此小部件及其后代
这是通用&#34;析构函数&#34;所有小部件用户应该具有的功能 打电话给小部件干净地丢弃。一旦小部件被销毁,它就会被破坏 从经理对象中删除。
在您的第一个示例中,destroyRecursive
将调用窗口小部件上的destroy(但由于true
参数而不是dom元素)。与你的第二个例子形成对比,在第二个例子中,仅在调用它的小部件的后代上调用destroy。由于没有指定preserveDom
,它将销毁dom元素以及小部件注册表。