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

不确定您的延期活动要去哪里。Backbone 已经有办法做到这一点。

在您的视图中,将集合中的“刷新”事件绑定到视图渲染函数。每当您对集合调用 fetch 时,都会触发刷新事件并重新呈现您的视图。

于 2011-08-22T17:16:57.530 回答
0

也许下划线defer是您正在寻找的方法?

延迟调用函数,直到当前调用堆栈被清除,类似于使用延迟为 0 的 setTimeout。对于在不阻塞 UI 线程更新的情况下以块执行昂贵的计算或 HTML 呈现很有用。

于 2011-08-24T23:27:20.960 回答