如何在Backbonejs中清理视图和模型

时间:2012-07-11 04:58:49

标签: backbone.js backbone-events backbone-views

    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请求),我该如何删除以前调用的模型我每次在视图中创建一个新请求。

感谢。

2 个答案:

答案 0 :(得分: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,那么你可能在名称中有一个冲突,或者某种程度上导致第二次获取的事件的链接。

答案 1 :(得分: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'));               
    }