我如何确定木偶视图已被彻底摧毁?

时间:2015-02-04 09:45:54

标签: backbone.js marionette

当我在木偶视图上调用destroy并稍后尝试使用它时会抛出错误,说它已被破坏。此外,当我直接从DOM中删除视图时,它也会抛出相同的错误。所以我需要知道如何确定视图被破坏。

1 个答案:

答案 0 :(得分:5)

所以@JonathanMiles是正确的,但我认为一些细化可能对您和我们的Google员工有所帮助。

您恰当地提到了两种可能会破坏视图的方法。

  1. 在您的观看中调用this.destroy().destroy()方法执行以下几项重要操作:1。设置view.isDestroyed位,以便Marionette 知道您的视图已从DOM中删除;通过调用最终调用view.remove()的{​​{1}}来删除DOM中的视图和附加到它的大多数绑定,并删除view.$el.remove()没有的其他绑定(如Marionette view.$el.remove()元素和ui)。

  2. Simpy在您的观点上behaviors。这将从DOM中删除与视图关联的HTML以及绑定到该HTML的事件,但不会删除在缓存的HTML元素上创建的事件。

  3. 现在,首先提到的,显然木偶会知道视图被破坏了。如果您需要知道视图是否已被销毁,例如this.$el.remove()指出,只需获取对视图的引用并检查@JonathanMiles的值。

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

    故事的寓意不仅仅是view.isDestroyed。使用Marionette的view.$el.remove()完全释放视图对象以进行垃圾回收,并在视图view.destroy()中获得知道的优势。