Javascript 仅从组件代码从DOM中销毁组件
我创建了一个emberjs组件,在js文件中有一个模板和一些代码。我想从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
//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
似乎没有触发。请再次检查旋转。