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', ...} ]

是的,我尝试了足够多,但我似乎无法管理它

4

2 回答 2

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

希望这对你有帮助。

于 2013-06-26T08:28:25.440 回答
1

依靠 Underscore 的有用功能:

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/

第一个_.map加上_.extend只是用于替换category_items. 我觉得这很滥用,但不记得是否有任何方法可以一次性做到这一点。

于 2013-06-26T10:16:51.503 回答