2

カテゴリとアイテムの 2 つのバックボーン コレクションがあり、カテゴリには ID、名前、およびアイテム (コンマで区切られた文字列形式のアイテム ID が含まれます) を持つカテゴリ モデルと、アイテム モデル (ID、名前など) を含むアイテム コレクションがあります。

それらをハンドルバーテンプレートで簡単にレンダリングできる1つのオブジェクトにマージするにはどうすればよいですか

サンプル構造:

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」という関数を書きます。次の手順に従って、2 つのコレクションのデータをマージします。

  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 に答える