Backbone.js 我怎么能确定木偶图已经被完全破坏了?

Backbone.js 我怎么能确定木偶图已经被完全破坏了?,backbone.js,marionette,Backbone.js,Marionette,当我在木偶视图上调用destroy并稍后尝试使用它时,会抛出一个错误,表示它已被销毁。另外,当我直接从DOM中删除视图时,它也会抛出相同的错误。因此,我需要知道如何确保视图已销毁。您可以使用视图的isDestroyed属性检查视图是否已销毁 // Example if (view.isDestroyed) { view = new View({}); } view.doSomething(); 因此,@JonathanMiles是正确的,但我认为一些细节可能会对你和我们的谷歌用户有所帮

当我在木偶视图上调用destroy并稍后尝试使用它时,会抛出一个错误,表示它已被销毁。另外,当我直接从DOM中删除视图时,它也会抛出相同的错误。因此,我需要知道如何确保视图已销毁。

您可以使用视图的
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
    元素和
    行为

  • Simpy do
    在您的视图上执行此操作。$el.remove()
    。这将从DOM中删除与视图关联的HTML以及绑定到该HTML的事件,但不会删除在缓存的HTML元素上创建的事件

  • 现在,第一次提到,很明显,木偶会知道视图被破坏了。如果您需要知道视图是否被破坏,如
    @JonathanMiles
    所指出的,只需获取视图的引用并检查
    view.isDestroyed
    的值即可

    但是,如果您决定自己从DOM中删除视图HTML,那么Marionette将不知道该视图是否不在DOM中。您可能会出现错误,特别是因为您可能仍然将事件绑定到一个没有关联HTML的视图(尽管大多数情况可能只是在不被注意的情况下默默地传递),但不是来自木偶。更糟糕的是,您可能决定替换被拒绝的视图,您将生成新视图。但是,旧的视图实例仍然有效。虽然不会出现僵尸事件,但这是一个潜在的内存泄漏


    这个故事的寓意是不要简单地做
    查看。$el.remove()
    。使用木偶网的
    view.destroy()
    完全释放视图对象以进行垃圾收集,并利用了解视图
    .isdestroyded

    的优势,在尝试保留视图时通常会出现此错误
    region.show(newview())
    将确保您永远不会尝试使用已销毁的视图