当我在木偶视图上调用destroy并稍后尝试使用它时会抛出错误,说它已被破坏。此外,当我直接从DOM中删除视图时,它也会抛出相同的错误。所以我需要知道如何确定视图被破坏。
答案 0 :(得分:5)
所以@JonathanMiles
是正确的,但我认为一些细化可能对您和我们的Google员工有所帮助。
您恰当地提到了两种可能会破坏视图的方法。
在您的观看中调用this.destroy()
。 .destroy()
方法执行以下几项重要操作:1。设置view.isDestroyed
位,以便Marionette 知道您的视图已从DOM中删除;通过调用最终调用view.remove()
的{{1}}来删除DOM中的视图和附加到它的大多数绑定,并删除view.$el.remove()
没有的其他绑定(如Marionette view.$el.remove()
元素和ui
)。
Simpy在您的观点上behaviors
。这将从DOM中删除与视图关联的HTML以及绑定到该HTML的事件,但不会删除在缓存的HTML元素上创建的事件。
现在,首先提到的,显然木偶会知道视图被破坏了。如果您需要知道视图是否已被销毁,例如this.$el.remove()
指出,只需获取对视图的引用并检查@JonathanMiles
的值。
但是,如果您决定自己从DOM中删除视图HTML,Marionette将不知道视图是否不在DOM中。您可能会遇到错误,特别是因为您可能仍然将事件绑定到视图而没有与之关联的HTML(尽管大多数情况可能只是默默地传递),但不是来自Marionette。更糟糕的是,您可能会决定替换被拒绝的视图,您将生成新的视图。然而,旧的视图实例仍将存在。虽然你不会有僵尸事件,但这是一个潜在的内存泄漏。
故事的寓意不仅仅是view.isDestroyed
。使用Marionette的view.$el.remove()
完全释放视图对象以进行垃圾回收,并在视图view.destroy()
中获得知道的优势。