我知道函数listenTo,我需要在困难的条件下应用它。我有一个数组,每个数组的入口都是对集合的引用。我需要等待所有集合都被完全取出。我的fetch函数集合通过reset函数存储数据。我听了事件重置。
var postTwitter= new Array();
var postInstagram= new Array();
var i=0;
_.each(AttoriCollectionDb.models, function (model) {
postTwitter[i]=new Posts();
postTwitter[i].fetch({'user_id':model.get("id_twitter"),'type':'twitter'});
postInstagram[i]=new Posts();
postInstagram[i].fetch({'user_id':model.get("id_instagram"),'type':'instagram'});
i++;
});
this.listenTo(postTwitter[0], 'reset', ok1);// now wait only one collection but I need wait all collection completely fetched.
在上面的代码中,我只等待一次收集重置,如何在所有收集都有重置事件的情况下收听?
答案 0 :(得分:1)
如果在Posts集合的初始化中写'on'怎么样?
var Posts = Backbone.Collection.extend({initialize: function () {
this.on('reset', ok1);
}});
答案 1 :(得分:1)
所以这是我的方法:
1)添加自定义事件"重置:allPosts"当所有帖子都被解雇时触发"重置"
2)收集"重置"触发你想要被调用(所有的帖子Instagram +推特)。我将此命名为#34; totalPosts"
3)设置一个范围变量" totalResetted",这样你就可以在Post发布之后逐步添加" reset"
4)每次"重置"解雇后,在" totalResetted"中添加一个并检查" totalResetted"等于" totalPosts"。如果它相等,那意味着所有帖子都被解雇了#34;重置"
这是我想出的:
var postTwitter= new Array();
var postInstagram= new Array();
var totalPosts= AttoriCollectionDb.models.length * 2; // Times two because we're adding Twitter and Instagram
var totalResetted= 0;
var checkResetted = function() {
totalResetted++;
if (totalPosts === totalResetted) this.trigger('reset:allPosts');
}
// When all posts are 'reset' then do something;
this.on('reset:allPosts', function(){ alert('all posts fired reset!!') });
var i=0;
var that = this;
_.each(AttoriCollectionDb.models, function (model) {
postTwitter[i]=new Posts();
that.listenToOnce( postTwitter[i], 'reset', checkResetted);
postTwitter[i].fetch({'user_id':model.get("id_twitter"),'type':'twitter'});
postInstagram[i]=new Posts();
that.listenToOnce( postInstagram[i], 'reset', checkResetted);
postInstagram[i].fetch({'user_id':model.get("id_instagram"),'type':'instagram'});
i++;
});