【问题标题】:Merging two backbone collection and models into one object using underscore使用下划线将两个主干集合和模型合并为一个对象
【发布时间】:2013-06-26 07:46:41
【问题描述】:

我有两个主干集合类别和项目,类别包含具有 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', ...} ]

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

【问题讨论】:

    标签: javascript backbone.js underscore.js javascript-objects


    【解决方案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。我觉得这很滥用,但不记得是否有任何方法可以一次性做到这一点。

    【讨论】:

    • 哇,这是我需要的代码,代码行数更少,我知道我仍然可以优化它,但是很难探索和尝试各种下划线方法,我的版本使用each,然后get 然后push,但我更喜欢这个,谢谢...
    【解决方案2】:

    我编写了一个名为“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);
    

    希望这对你有帮助。

    【讨论】:

    • 谢谢,我设法创建了相同的函数,但我没有使用 findWhere 和或 find 我使用 get,因为它是集合中的唯一 ID。
    猜你喜欢
    • 2012-08-25
    • 2023-03-23
    • 2013-10-11
    • 1970-01-01
    • 2013-07-05
    • 2023-03-07
    • 2012-12-25
    • 1970-01-01
    • 2011-11-24
    相关资源
    最近更新 更多