0
    movieDb.Router  = Backbone.Router.extend({
        routes:{
            '':         'landPage',
            'home':     'landPage',
            'login':    'login',
            'signup':   'signup'
        },

        landPage: function(p){
            $('div#homepage').empty();
        },

        login:  function(p){
            new loginViews(); // Calls its own model                
        },

        signup: function(p){
            new signupViews(); // Calls its own model
        }
    });

问题是当来自注册和调用登录时,它还会同时调用以前的模型请求(注册)导致登录和注册请求(我的模型是 ajax 请求),我如何在每次创建时删除以前调用的模型在我看来是一个新的要求。

谢谢。

4

2 回答 2

1

我发现最简单的方法是使用 Backbone.Marionette https://github.com/derickbailey/backbone.marionette ,它允许您使用不同的区域来实现不同的功能。
如果你不想有另一个依赖,你可以手动做到这一点:http: //lostechies.com/derickbailey/2011/09/15/zombies-run-managing-page-transitions-in-backbone-apps/

但是,如果您看到一个模型上的 fetch 正在调用另一个模型上的 fetch,那么您可能有名称冲突,或者以某种方式导致第二次 fetch 的事件链。

于 2012-07-11T05:22:55.750 回答
0

我只是想分享我是如何解决这个问题的。(非常基本的方法,不确定这是否是最佳实践,但它有效)

我用关闭功能扩展了视图

    Backbone.View.prototype.close = function () {
        this.unbind();
        this.undelegateEvents();
    };

并在我的路由器中创建了一个 showView 函数,每次我在我的视图中触发一个事件时都会调用它。

    showView: function (view) {
        //destroy current view
        if(this.currentView !== undefined) {
            this.currentView.close();
        }

        //create new view
        this.currentView = view;
        this.currentView.delegateEvents();

        return this.currentView;
     }

然后在我的视图中调用该 showView 函数

     addMovie:   function(p){
        this.showView(this.movieForm('add'));               
    }
于 2012-07-19T02:06:24.817 回答