2013-05-11 79 views
0

我有一個瓷磚的集合。當應用程序開始收集從服務器獲取其克隆被分配到MdApp.TilesCollection對象的collection屬性:骨幹:保持同步這兩個集合

MdApp.TilesCollection.fetch({ 
     success: function(){ 
      console.log('Tiles collection fetched from server'); 
      console.log(MdApp.TilesCollection); 
      if(!MdApp.TilesCollection.collection){ 
       MdApp.TilesCollection.collection = new Backbone.Collection(MdApp.TilesCollection.models); 
       console.log('Made copy of collection in fetched collection instance'); 
      } 
     }, 
     error: function(){ 
      console.log('Error!Unable to fetch tiles collection from server'); 
     } 
    }); 

這是用於過濾的目的而進行:

TilesCollection = Backbone.Collection.extend({ 

    model: MdApp.TileModel, 

    url : 'api/', 

    rewriteModel: function(model){ 
     this.set(model); 
    }, 

    byPrivate : function(){ 
     var filtered = this.collection.filter(function(tile){ 
      return tile.get('private') == '1'; 
     }); 
     console.log('filtered private: ' + filtered); 
     return filtered; 
    }, 

    byPublic : function(){ 
     var filtered = this.collection.filter(function(tile){ 
      return tile.get('private') == '0'; 
     }); 
     console.log('filtered public: ' + filtered); 
     return filtered; 
    }, 

    byFavourite: function(){ 
     var filtered = this.collection.filter(function(tile){ 
      return tile.get('favourite') == '1'; 
     }); 
     console.log('filtered favourite: ' + filtered); 
     return filtered; 
    }, 

    byAsc : function(){ 
     var filtered = this.collection.sortBy(function(tile){ 
      return tile.get('id'); 
     }); 
     console.log('filtered ascending: ' + filtered); 
     return filtered; 
    }, 

    byDesc : function(){ 
     var filtered = this.collection.sortBy(function(tile){ 
      return -tile.get('id'); 
     }); 
     console.log('filtered descending: ' + filtered); 
     return filtered; 
    }, 

    refilter: function(){ 
     console.log(this.collection); 
     return this.collection.models; 
    } 
}); 

我想要做的就是保持MdApp.TilesCollectionMdApp.TilesCollection.collection同步。當添加或修改MdApp.TilesCollection的模型時,我想對其克隆進行特定更改。當然,我可以在每次更改某個東西時創建新的集合,並將其分配給該屬性,但是當收集非常大時,它可能非常低效。有沒有人可以放棄任何提示或解決方案?

回答

0

您不需要爲了進行過濾而保留集合的克隆,就可以對原始集合執行這些過濾操作。

byPrivate : function(){ 
    var filtered = this.where({ private: 1 }); 
    console.log('filtered private: ' + filtered); 
    return filtered; 
} 

如果因任何原因,你仍想保留的,而不是在獲取成功的回調,你可以簡單地reset像這樣創建一個新的集合克隆並實現同步,:

MdApp.TilesCollection.collection.reset(MdApp.TilesCollection.models);