Backbone.js 我怎么能确定木偶图已经被完全破坏了?
当我在木偶视图上调用destroy并稍后尝试使用它时,会抛出一个错误,表示它已被销毁。另外,当我直接从DOM中删除视图时,它也会抛出相同的错误。因此,我需要知道如何确保视图已销毁。您可以使用视图的Backbone.js 我怎么能确定木偶图已经被完全破坏了?,backbone.js,marionette,Backbone.js,Marionette,当我在木偶视图上调用destroy并稍后尝试使用它时,会抛出一个错误,表示它已被销毁。另外,当我直接从DOM中删除视图时,它也会抛出相同的错误。因此,我需要知道如何确保视图已销毁。您可以使用视图的isDestroyed属性检查视图是否已销毁 // Example if (view.isDestroyed) { view = new View({}); } view.doSomething(); 因此,@JonathanMiles是正确的,但我认为一些细节可能会对你和我们的谷歌用户有所帮
isDestroyed属性检查视图是否已销毁
// Example
if (view.isDestroyed) {
view = new View({});
}
view.doSomething();
因此,@JonathanMiles
是正确的,但我认为一些细节可能会对你和我们的谷歌用户有所帮助
您恰当地提到了破坏视图的两种方式
在视图中调用this.destroy()
。.destroy()
方法做了几个关键的事情:1。设置视图.isDestroyed
位,以便木偶可以知道您的视图已从DOM中删除;通过调用view.remove()
(最终调用view.$el.remove()
)从DOM中移除视图和大多数附加到它的绑定,并移除视图中的其他绑定。$el.remove()
不移除的绑定(如木偶ui
元素和行为
)
在您的视图上执行此操作。$el.remove()
。这将从DOM中删除与视图关联的HTML以及绑定到该HTML的事件,但不会删除在缓存的HTML元素上创建的事件@JonathanMiles
所指出的,只需获取视图的引用并检查view.isDestroyed
的值即可
但是,如果您决定自己从DOM中删除视图HTML,那么Marionette将不知道该视图是否不在DOM中。您可能会出现错误,特别是因为您可能仍然将事件绑定到一个没有关联HTML的视图(尽管大多数情况可能只是在不被注意的情况下默默地传递),但不是来自木偶。更糟糕的是,您可能决定替换被拒绝的视图,您将生成新视图。但是,旧的视图实例仍然有效。虽然不会出现僵尸事件,但这是一个潜在的内存泄漏
这个故事的寓意是不要简单地做
查看。$el.remove()
。使用木偶网的view.destroy()
完全释放视图对象以进行垃圾收集,并利用了解视图.isdestroyded
的优势,在尝试保留视图时通常会出现此错误region.show(newview())
将确保您永远不会尝试使用已销毁的视图