48

私はいくつかのオブジェクトを持つモデルを持っています:

//Model
Friend = Backbone.Model.extend({
    //Create a model to hold friend attribute
    name: null,
}); 

//objects
var f1 = new Friend({ name: "Lee" });
var f2 = new Friend({ name: "David"});
var f3 = new Friend({ name: "Lynn"});

また、これらの友達オブジェクトをコレクションに追加します。

//Collection
Friends = Backbone.Collection.extend({
    model: Friend,
});

Friends.add(f1);
Friends.add(f2);
Friends.add(f3);

そして今、友達の名前に合わせたモデルを手に入れたいと思います。IDこれを実現するために属性を追加できることを知っています。しかし、これを行うにはもっと簡単な方法があるはずだと思います。

4

4 に答える 4

87

単純な属性ベースの検索には、次を使用できますCollection#where

どこ collection.where(attributes)

渡された属性に一致するコレクション内のすべてのモデルの配列を返します。の単純なケースに役立ちfilterます。

したがって、friendsFriendsインスタンスの場合、次のようになります。

var lees = friends.where({ name: 'Lee' });

Collection#findWhere(コメントに記載されているように後で追加)もあります:

findWhere collection.findWhere(attributes)

whereと同じですが、渡された属性に一致するコレクション内の最初のモデルのみを直接返します。

したがって、1つだけを求めている場合は、次のように言うことができます。

var lee = friends.findWhere({ name: 'Lee' });
于 2013-01-20T01:14:35.567 に答える
65

バックボーンコレクションはunderscorejsfindメソッドをサポートしているため、これを使用すると機能するはずです。

things.find(function(model) { return model.get('name') === 'Lee'; });
于 2013-01-20T00:54:29.633 に答える
6

最も簡単な方法は、Backbone Modelの「idAttribute」オプションを使用して、モデルIDとして「name」を使用することをBackboneに通知することです。

 Friend = Backbone.Model.extend({
      //Create a model to hold friend attribute
      name: null,
      idAttribute: 'name'
 });

これで、Collection.get()メソッドを直接使用して、友人の名前を使用して友人を取得できます。このように、Backboneは、コレクション内のすべてのFriendモデルをループするのではなく、その「名前」に基づいてモデルを直接フェッチできます。

var lee = friends.get('Lee');
于 2015-05-14T16:05:16.347 に答える
5

バックボーンコレクションを呼び出すことができますfindWhere()。これにより、探しているモデルが正確に返されます。

例:

var lee = friends.findWhere({ name: 'Lee' });
于 2016-08-31T09:57:33.490 に答える