2013-06-26 25 views
2

我有兩個主幹集合類別和項目,類別包含具有ID,名稱和項目的類別模型(w/c包含以逗號分隔的字符串格式的項目ID)包含項目模型(id,名稱等)的集合。使用下劃線將兩個主幹集合和模型合併到一個對象中

如何將它們合併,可以很容易地在車把模板呈現一個對象

樣本結構:

var Categories = [{'id':'1', 'category_name':'Burgers', 'category_items':'1,2'},{'id':'2','category_name':'Drinks','category_items':'3'}]; 

var Items = [{'id':'1','item_name':'Burger 1'},{'id':'1','item_name':'Burger 2'},{'id':'1','item_name':'Chicken; 1'}]; 

樣本輸出:

var output = [{'id':'1', 'category_name':'Burgers', 'items':[{'id':'1','item_name':'Burger1', ...},{'id':'1','item_name':'Burger2', ...} ]}, {'id':'2', 'category_name':'Chicken', 'items':[{'id':'3','item_name':'Chicken1', ...} ] 

是的,我嘗試了足夠的,但我似乎無法管理它

回答

1

依託下劃線的有用的功能:

var json = _.map(c.toJSON(), function(c) { 
    return _.extend(c, { 
    category_items: _.map(c.category_items.split(','), function(id)     { 
     return i.get(id).toJSON(); 
    }) 
    }); 
}); 

http://jsfiddle.net/626x9/1/

加上_.extend第一_.map只是服務於更換category_items目的。我覺得它很有辱人格,但不記得是否有任何方法可以一次完成。

+0

哇,這是我需要的代碼少的代碼,我知道我仍然可以優化這個代碼,但很難探索和嘗試各種下劃線方法,我的版本使用'each',然後'get',然後'push' ,但我更喜歡這一個更好謝謝... – user1076813

1

我寫了一個名爲「mergeObjectWithId」的函數。它合併來自兩個集合的數據,請按照以下步驟操作:

  1. 使用collection.findWhere()獲取需要合併的目標模型。
  2. 使用collection.where()獲取項目集合中的模型。
  3. 然後將items數組分配給目標對象的屬性項。現在你得到你想要的輸出對象。

試試這個功能:

function mergeObjectWithId(id){ 
    //assume categories is your Category collection instance 
    var obj = categories.findWhere({id:id}).clone(); 
    //assume items is your Item collection instance 
    obj.items = items.find({id:id}).slice(0); 
    return obj; 
} 

var output = mergeObjectWithId(1); 

希望這是對你有幫助。

+0

謝謝,我設法創建相同的功能,而不是使用findWhere和或找到我使用得到,因爲它是一個集合中唯一的ID。 – user1076813

相關問題