2014-05-03 62 views
0

我知道函數listenTo,我需要在困難的條件下應用它。我有一個數組,並且每個數組入口都是對一個collection的引用。我需要等待所有collection都被完全獲取。我的獲取函數集合通過重置函數存儲數據。而且我聽重置事件。主幹多重listenTo

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

在一個側面說明,你可能想看看如何'_.each'作品。你不需要自己保留一個索引,也不需要它來訪問該集合的項目。 – m90

回答

1

所以這是我的方法:

1)添加自定義事件「復位:allPosts」火當所有的帖子都炒魷魚「復位」

2)收集總量的「重置「觸發器,你想被稱爲(所有帖子instagram +微博)。我命名爲「totalPosts」

3)設置一個範圍變量「totalResetted」,這樣你就可以在帖子後逐步添加火災「復位」

4)在每一個「復位」炒魷魚,添加一個到「 totalResetted「並檢查」totalResetted「是否等於」totalPosts「。如果是平等的,這意味着所有的帖子都炒魷魚「復位」

這是我想出:

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++; 

     }); 
1

在Posts集合的初始化中寫'on'怎麼樣?

var Posts = Backbone.Collection.extend({initialize: function() { 
    this.on('reset', ok1); 
}});