Javascript 如何根据ID以外的属性从集合中查找模型?

Javascript 如何根据ID以外的属性从集合中查找模型?,javascript,backbone.js,backbone.js-collections,Javascript,Backbone.js,Backbone.js Collections,我有一个带有多个对象的模型: //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"});

我有一个带有多个对象的模型:

//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
属性来实现这一点。但是我认为应该有一些更简单的方法来实现这一点。

主干集合支持下划线js
find
方法,因此使用该方法应该是可行的

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

对于简单的基于属性的搜索,可以使用:

where
集合。where(属性)

返回集合中与传递的属性匹配的所有模型的数组。适用于
过滤器
的简单情况

因此,如果
friends
是您的
friends
实例,那么:

var lees = friends.where({ name: 'Lee' });
还有(如评论中所述,后面增加了一项内容):

findWhere
集合。findWhere(属性)

与where类似,但直接返回集合中与传递的属性匹配的第一个模型

所以,如果你只追求一个,那么你可以说:

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

最简单的方法是使用主干模型的“idAttribute”选项,让主干知道您想使用“name”作为模型Id

 Friend = Backbone.Model.extend({
      //Create a model to hold friend attribute
      name: null,
      idAttribute: 'name'
 });
现在,您可以直接使用Collection.get()方法使用朋友的名字检索朋友。这样,主干不会在集合中的所有好友模型中循环,而是可以根据模型的“名称”直接获取模型


您可以在主干集合上调用
findWhere()
,该集合将准确返回您要查找的模型

例如:

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

因此,当回调函数的返回值为true时,find函数将返回模型?简单性最好!或者使用
friends.findWhere({name:“Lee”})
应该只能得到集合中匹配的第一个模型(这样可以有效地为您节省
[0]
),但是我怀疑它需要主干>1.0.0。我始终努力使用这些工具,因为它们是预期使用的。。。这是主干道!
var lee = friends.findWhere({ name: 'Lee' });