2

私のバックボーン アプリでは、3 つのコレクションを読み込み、レンダリング機能で「リセット」イベントをバインドします。したがって、このように、コレクションを取得すると、さまざまな結果が出力されますが、同時にではありません。

jquery 遅延メソッド ($.when、$.then) を使用してすべてを同時に出力しますが、ビューで「バインド イベント」を使用する場合はどうすればよいですか?

これはコードです:

ルーター:

App.Routers.test1 = Backbone.Router.extend({  

    routes: {       
        "/test" : "test"        
    },

    initialize: function() {                            
        // Models
        this.Models_1 =     new App.Collections.coll_1;     
        this.Models_2 =     new App.Collections.coll_2;
        this.Models_3 =     new App.Collections.coll_3;

        // Views
        this.View_1 =       new App.Views.view_1( {model: this.Models_1} );
        this.View_2 =       new App.Views.view_2( {model: this.Models_2} );
        this.View_3 =       new App.Views.view_3( {model: this.Models_3} );         
    },

    test: function() { 
        $.when(

            this.Models_1.fetch(),
            this.Models_2.fetch(),
            this.Models_3.fetch()

        ).then(function() {

            // ?????????????????????????

            //  What should I do here?

            // ?????????????????????????

        });
    }

});

ビュー 1:

App.Views.view_1 = Backbone.View.extend({

    initialize: function() {
        _.bindAll(this, 'render');
        this.model.bind('reset', this.render);
    },

    render: function() {

        // print the data...

    }

}); 
4

3 に答える 3

6
test: function() { 
    $.when(
        this.Models_1.fetch({silent: YES}), // silent will prevent triggering any events on reset or add
        this.Models_2.fetch({silent: YES}),
        this.Models_3.fetch({silent: YES})
    ).then(_.bind(function() {
        this.Models_1.trigger('reset'); // manually trigger events in sequence you want
        this.Models_3.trigger('reset');
        this.Models_2.trigger('reset');
    }, this));
}
于 2011-08-23T04:07:13.933 に答える
1

延期されたイベントでどこに行くのかわからない。バックボーンにはすでにこれを行う方法があります。

ビューで、コレクションからのイベント「refresh」をビューレンダリング関数にバインドします。コレクションでfetchを呼び出すたびに、更新イベントがトリガーされ、ビューが再レンダリングされます。

于 2011-08-22T17:16:57.530 に答える
0

おそらくアンダースコアの延期があなたが探している方法ですか?

setTimeout を遅延 0 で使用するのと同様に、現在のコール スタックがクリアされるまで関数の呼び出しを延期します。UI スレッドの更新をブロックすることなく、チャンクで高価な計算または HTML レンダリングを実行するのに役立ちます。

于 2011-08-24T23:27:20.960 に答える