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/

しかし、あるモデルのフェッチが別のモデルのフェッチを呼び出している場合は、おそらく名前の衝突か、2 番目のフェッチを引き起こしている何らかのイベントの連鎖があります。

于 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 に答える