1

私はバックボーン コレクションを持っています。ここで、mdl.get('group') を反復処理して検索しています。これは以下を返します:

[undefined, undefined, group, group, group, undefined, group, group, group, undefined, group, group]

返してほしいのは、これらのグループ モデルの配列 (またはコレクション) です。

[undefined, undefined, [group], undefined, [group], undefined, [group]

私は最善の方法を考えようとしています:

  • オブジェクトを反復する
  • 変更せずに「未定義」の値を返す
  • 値が似ている兄弟を見つける
  • オブジェクト内でそれらを配列に折りたたむ

_.groupBy メソッドとよく似ていますが、オブジェクト内のモデルの正しい順序を保持する必要があります。

これにアプローチする方法についていくつかのアイデアが欲しいです。これまでのところ、これに正しく取り組む方法につまずいています。

ありがとう!

4

2 に答える 2

0

これを行うには、collection.groupBy() を使用できます。最初に groupBy "group" を使用してグループ化されたモデルのハッシュを作成し、次に collection.map を使用して兄弟をモデルにマップします。

ここにフィドルがあります: http://jsfiddle.net/puleos/w7drB/

var models = [
    {name: "Scott", group: "alpha"}, 
    {name: "Rose", group: "alpha"}, 
    {name: "Charles", group: "alpha"}, 
    {name: "Stan"}, 
    {name: "John"}, 
    {name: "Mary", group: "beta"}, 
    {name: "Dan", group: "beta"}, 
    {name: "Paul", group: "beta"}, 
    {name: "Grace"}, 
    {name: "Sarah", group: "omega"} 
];

var SourceCollection = Backbone.Collection.extend({});

var sourceCollection = new SourceCollection(models);
var grouped = sourceCollection.groupBy('group');

sourceCollection.map(function(model) {
  if(model.has("group")) {
      model.set({siblings: grouped[model.get("group")]});
  }
});

// sourceCollection with siblings 
console.log(sourceCollection);
于 2013-05-11T05:32:00.140 に答える