web-dev-qa-db-ja.com

ID以外の属性に従ってコレクションからモデルを見つける方法

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

//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"});

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

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

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

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

47
Anar

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

things.find(function(model) { return model.get('name') === 'Lee'; });
64

単純な属性ベースの検索では、 _Collection#where_ を使用できます。

wherecollection.where(attributes)

渡されたattributesと一致するコレクション内のすべてのモデルの配列を返します。 filterの単純な場合に便利です。

friendsFriendsインスタンスである場合、次のようになります。

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

_Collection#findWhere_ もあります(コメントに記載されている後の追加):

findWherecollection.findWhere(attributes)

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

したがって、1つだけの後であれば、次のように言うことができます。

_var lee = friends.findWhere({ name: 'Lee' });
_
84
mu is too short

最も簡単な方法は、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');
6
coderC

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

例:

var lee = friends.findWhere({ name: 'Lee' });
5
Silver Ringvee