微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

javascript – 在路由更改时销毁骨干视图

在离开当前路线位置后,我的视图应该被销毁.

因此,在此示意图示例中,应在用户输入其凭据后销毁登录视图:

我尝试使用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/

是否有解决方案在离开路线位置后摧毁视图?

我是否需要hack a new event进入Backbone.js?

解决方法:

我用来做的是让App.current变量指向正在渲染的当前视图.

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

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

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

这样我只能在每条路线上播放一个视图,摆脱像你这样的问题.

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐