javascript - 在路由更改时销毁 Backbone View

标签 javascript jquery backbone.js backbone-views backbone-routing

离开当前路线位置后,我的 View 应该被销毁。

所以在这个示意图示例中,登录 View 应该在用户输入他的凭据后销毁:

Routes

我试图通过使用 Backbone.Router 事件来解决这个问题:

var Router = Backbone.Router.extend({
    initialize: function () {
        Backbone.history.start();
    },
    routes: {
        "sample" : "sample"
    },
    sample: function(){
      // Build view
      var demoView = $("<div/>")
          .appendTo(document.body)  
          .text("I am lost!");

      // Destroy view
      this.once('route', function(){
        demoView.remove(); 
      });
    },
});

不幸的是,这不起作用,因为路由事件在路由执行后引发:

http://jsfiddle.net/hcuX9/

有没有离开路线位置后破坏views的解决方案?

我必须 hack a new event进入 Backbone.js?

最佳答案

我用来做的是让一个 App.current 变量指向正在呈现的当前 View 。

在每条路线(或您的情况下的相关路线)的顶部,我从 App.current 中删除当前 View ,然后为其分配新 View :

someRoute: function() {
  if(App.current && App.current.remove) App.current.remove();  

  // Asign a new current page
  App.current = new SomeView();
  ...
}

这样一来,我只让每条路线有一个 View ,从而消除了像您这样的问题。

如果您不喜欢检查 App.current 并在每个路由顶部调用 remove 方法,您可以监听 Backbone.history 路由事件并在那里注入(inject)该逻辑:

Backbone.history.on('route', function() {
  if(App.current && App.current.remove) App.current.remove();  
});

关于javascript - 在路由更改时销毁 Backbone View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15709844/

相关文章:

javascript - 显示灯箱后按需加载 JavaScript

jquery - 使用部分 View 的客户端验证

javascript - 我的 Backbone 文件出现类型错误?

javascript - Cesium ScreenSpaceEventType LEFT_DOWN 触发 LEFT_CLICK

javascript - 如何使用excelJs设置导出文件的标题样式

javascript - 如何使用绝对行号从复选框中使用 jquery 获取表格单元格的值

javascript - 仅在单击父项后打开子菜单

javascript - 在另一个 Marionette.ItemView 中调用函数

javascript - 无法将 html 元素附加到主干中的 el。

javascript - 如何将 jquery 调整大小功能添加到 WP 谷歌地图插件?