【问题标题】:How to delete old backbone views如何删除旧的主干视图
【发布时间】:2015-12-11 04:30:10
【问题描述】:

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

【问题讨论】:

    标签: javascript events backbone.js views


    【解决方案1】:

    您应该调用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

    【讨论】:

    • 我想在导航到新视图时触发销毁,所以在离开旧视图和进入新视图之间必须触发view.remove函数。那是我的问题,我不知道何时何地使用删除功能。我希望这能帮助你理解这个问题。
    • 您应该参考我在答案底部发布的链接。一种方法是修改 Backbone.View 类以包含一个 close 方法。另一个是创建一个父类,您的所有视图都从该类继承,支持关闭事件功能。最后,可以覆盖 Backbone.Router 中的导航方法以执行活动视图的销毁,然后调用原始导航函数或使用带有删除活动视图的回调函数的 router.route 手动设置路由。
    • 我试图通过创建与现有视图关联的全局变量来破坏路由器中的现有视图,并在创建与该全局变量新关联的新视图之前销毁它,但这并没有'似乎不起作用
    • 您能否发布您的代码以及您在原始问题中尝试过的内容?
    • @FrançoisLalonde:您的路由器中通常有一个this.currentView 来保存当前视图,然后当路由器切换到新视图时您会使用if(this.currentView) this.currentView.remove(); this.currentView = new WhateverView()
    【解决方案2】:

    这篇古老但精彩的文章by Derick Bailey 在解释问题以及如何解决它方面做得很好。正如 Monica 正确建议的那样,这依赖于 view.remove(),但您可以更新路由器以破坏现有视图 - 尝试类似于

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

    【讨论】:

    • 我尝试使用 if (currentView) { currentView.remove();当前视图 = 新视图(); }
    • 我试图在我的路由器的初始化中放一个this.currentView = null,在清理功能中,没有输入if语句,就像if(this.currentView)不起作用一样。 .
    • 在某些时候,您需要将 this.currentView 更新为您希望删除的视图。在您的个人骨干路由中执行此操作可能是有意义的,然后创建一个单独的函数,其中包含您的 if 语句,每次导航到新的骨干路由时都可以调用该语句。
    猜你喜欢
    • 2012-07-20
    • 1970-01-01
    • 1970-01-01
    • 2023-03-14
    • 1970-01-01
    • 1970-01-01
    • 2012-12-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多