2015-12-11 71 views
0

我已经搜索了互联网寻找破坏旧视图的方法。 有功能可以做到这一点,但是,我不知道如何触发它们。理想情况下,在关闭视图时会有一种触发破坏的方法。 我找不到如何触发该特定事件的方法。如何删除旧的骨干视图

回答

2

你应该叫view.remove()触发其销毁的文件http://backbonejs.org/#View-remove

例如,在指定的,如果你有:

var myView = Backbone.View.extend({ 
    initialize: function() { 
     ... 
    }, 

    render: function() { 
     ... 
    } 
}); 

您可以稍后致电myView.remove()前提是你必须myView提供一个参考。

如果您使用listenTo(推荐)方法而不是on侦听器,则此方法还应删除与该视图绑定的任何事件侦听器。您也可以添加view.off()以确保事件被删除。

此外,您将需要添加视图的方式来侦听关闭事件,以便您可以调用remove和off方法。你应该参考12

+0

我想触发毁灭时,我了解它们到一个新的观点,所以view.remove函数必须在离开旧视图和输入新视图之间触发。这是我的问题,我不知道何时何地使用remove函数。我希望这会帮助你理解这个问题。 –

+0

你应该参考我在答案底部发布的链接。一种方法是修改Backbone.View类以包含close方法。另一种方法是创建一个父类,以使您的所有视图继承自支持关闭事件功能的视图。最后,可以重写Backbone.Router中的导航方法来执行活动视图的销毁,然后调用原始导航函数或使用router.route手动设置路由,并使用删除活动视图的回调函数。 –

+0

我试图通过创建一个与现有视图关联的全局变量来销毁路由器中的现有视图,并在创建与该全局变量新关联的新视图之前销毁该视图,但似乎不起作用 –

0

这个古老而神奇的作品by Derick Bailey在解释这个问题以及如何解决问题方面做得非常出色。由于莫妮卡正确地提出这依赖于view.remove()但你可以更新你的路由器来破坏你现有的观点 - 尝试类似的东西

if (currentView) { 
    currentView.remove(); 
    currentView = newView(); 
} 
+0

我试图使用 if(currentView)currentView.remove(); currentView = newView(); } –

+0

我试图把一个this.currentView = null在初始化我的路由器,在清理函数中,没有输入if语句,就像if(this.currentView)不起作用.. –

+0

在某个点您需要将this.currentView更新为您想要删除的视图。在您的各个骨干路由中执行此操作可能很有意义,然后创建一个单独的函数,其中包含您可以在每次导航到新骨干路由时调用的if语句。 –