在我的骨干应用程序中,我加载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...
}
});
答案 0 :(得分: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));
}
答案 1 :(得分:1)
不确定延迟事件的去向。 Backbone已经有办法做到这一点。
在您的视图中,将事件“refresh”从集合绑定到视图渲染功能。每当您在集合上调用fetch时,都会触发刷新事件并重新渲染您的视图。
答案 2 :(得分:0)
也许下划线defer是您正在寻找的方法?
延迟调用函数,直到当前调用堆栈清除为止,类似于使用延迟为0的setTimeout。用于在不阻止UI线程更新的情况下执行昂贵的计算或HTML渲染。