如何在保留它附加的根节点的同时销毁它?

时间:2016-06-01 15:47:57

标签: javascript dojo

有没有办法销毁小部件但保留它所附加的dom节点?例如,我有一个div

<body>
    <div id="app">
    </div>
</body>

当我像这样附加小部件时

 new someWidget({}, 'app');
通过Id

到达此节点我得到类似

的内容
<body>
    <div id="app" widgetid="app">
    </div>
</body>

然后当我在这个小部件上调用destroy

var mywidget = registry.byId("app");
mywidget.destroy();

我最终得到了

<body>
</body>

小部件附加到的整个div消失了。但我真正想要的是分离&#39;然后销毁小部件并保留它附加的原始div。

有办法吗?

1 个答案:

答案 0 :(得分:1)

有两种方法可以解决这个问题。首先是使用data-dojo-attach-point并使用domConstruct.place放置窗口小部件节点。这会将窗口小部件节点附加到目标,从而使窗口小部件成为目标节点的子节点。稍后,当您销毁窗口小部件时,放置窗口小部件的主节点将不会被销毁。

<body>
<div data-dojo-attach-point="app"></div>
</body>


var myWidget= new someWidget();
domConstruct.place(myWidget.domNode, this.app);

其次是使用myWidget.destroy(true)。请参阅此处的__WidgetBase destroy()文档。传递的参数引用preserveDom属性,默认为false。确实如此,原始的DOM结构将被保留。从源页面引用:

  

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