Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/398.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 仅从组件代码从DOM中销毁组件_Javascript_Ember.js_Components - Fatal编程技术网

Javascript 仅从组件代码从DOM中销毁组件

Javascript 仅从组件代码从DOM中销毁组件,javascript,ember.js,components,Javascript,Ember.js,Components,我创建了一个emberjs组件,在js文件中有一个模板和一些代码。我想从DOM中删除该组件,并在某些条件下删除它的所有事件。我怎样才能做到这一点?或者以类似的方式达到同样的效果 //app/pods/custom-comp/component.js import Ember from 'ember'; export default Ember.Component.extend({ didInsertElement() { if(some_condition) { //if

我创建了一个emberjs组件,在js文件中有一个模板和一些代码。我想从DOM中删除该组件,并在某些条件下删除它的所有事件。我怎样才能做到这一点?或者以类似的方式达到同样的效果

//app/pods/custom-comp/component.js
import Ember from 'ember';

export default Ember.Component.extend({
    didInsertElement() {
       if(some_condition) { //if this condition is true then destory the component from DOM and remove all of its events.
          //destroy the component
       }
    }
});
请参阅以下内容。我只是用

this.$().remove();
this.destroy();

而且它似乎在起作用。然而;我建议用
{{if}}
块包装,而不是这样做;就组件设计而言,这听起来不太适合我;但我把它作为一个答案,因为它似乎在做你想做的事情。添加
this.destroy
至少会删除您的观察者,而且
didDestroyElement
钩子也会运行;但不是
willDestroyElement
。有关
destroy

的信息,请参阅。最简单的方法是在
{{if
块中包装组件。@使用
{{如果
block是一个选项。但它会增加模板中的代码。我想从组件本身删除元素。它有两行:P即使您设法从JavaScript端销毁了一个组件,它也会弄乱您的应用程序。@locks我的意思是我必须在不同的位置执行它。我有一个解决方案,但不确定它是否正确t与否。
此。$().remove()
在满意的条件下是的,你是对的。我只是想知道,它会解除事件和观察者的绑定吗?@murli2308我更新了旋转,看看和观察者是否仍然存在;是的,它确实存在。该组件似乎已从DOM中删除,但其观察者仍然有效;不知何故,Ember仍然保留对组件I g实例的引用uess.@murli2308此方法甚至不会触发生命周期挂钩,如
didDestroyElement
。如果我们在销毁组件之前从代码中调用这些方法,例如
this.willDestroyElement()
,并删除mehodi更新答案并添加
this.destroy()中的观察者,会怎么样
;这将删除您的观察者;
didDestroyElement
将运行;但是
willDestroyElement
似乎没有触发。请再次检查旋转。