destroy(),destroyRecursive(true),destroyDescendants()之间的区别

时间:2014-06-25 12:29:20

标签: dojo

创建小部件时,我检查是否存在如下所示的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可用的销毁功能。有人可以解释何时使用哪种破坏功能? &安培;是什么区别他们?

1 个答案:

答案 0 :(得分:14)

查看Dojo api(目前为1.10)这些方法在_WidgetBase中定义(虽然destroy来自dijit/Destroyable)并由所有小部件继承。由于这些都埋没在api文档中,而不是写在_Widgetbase教程页面中,我会在这里列出它们。

在内部,销毁 Blah 方法为自己(适用时)和他们的孩子调用destroy,这样这些函数就像简单的辅助方法一样,可以更容易地破坏东西。


破坏(preserveDom)

参数: preserveDom

输入:布尔值

描述:如果为true,则此方法将单独保留原始DOM结构。注意:这不适用于_TemplatedMixin小部件

<强>要点:

  

销毁此小部件,但不销毁其后代。后代意味着   this.containerNode中的小部件。还会破坏任何资源   (包括小部件)通过this.own()注册。

     

此方法还会破坏内部窗口小部件,例如创建的窗口小部件   假设这些小部件存在于this.domNode中,从模板开始   但在this.containerNode之外。

     

对于2.0,它计划这种方法也会破坏后代   小部件,因此应用程序不应该依赖于当前的销毁能力   小部件没有破坏它的后代。一般他们应该使用   具有子项的小部件的destroyRecursive()。


destroyDescendants(preserveDom)

参数: preserveDom

输入:布尔值

描述:可选)如果为true,则preserveDom属性将传递给所有后代窗口小部件的.destroy()方法。不适用于_Templated小部件。

<强>要点:

  

递归地销毁这个小部件的子节点及其后代。


destroyRecursive(preserveDom)

参数: preserveDom

输入:布尔值

描述:可选)如果为true,则此方法将使原始DOM结构单独保留后代窗口小部件。注意:这不适用于dijit._TemplatedMixin小部件。

  

销毁此小部件及其后代

     

这是通用&#34;析构函数&#34;所有小部件用户应该具有的功能   打电话给小部件干净地丢弃。一旦小部件被销毁,它就会被破坏   从经理对象中删除。


在您的第一个示例中,destroyRecursive将调用窗口小部件上的destroy(但由于true参数而不是dom元素)。与你的第二个例子形成对比,在第二个例子中,仅在调用它的小部件的后代上调用destroy。由于没有指定preserveDom,它将销毁dom元素以及小部件注册表。