我有一个包含多个对象的模型:
//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
属性来实现这一目标。但我认为应该有一些更简单的方法来做到这一点。
答案 0 :(得分:84)
对于基于简单属性的搜索,您可以使用Collection#where
:
其中
collection.where(attributes)
返回集合中与传递的属性匹配的所有模型的数组。适用于
filter
的简单案例。
因此,如果friends
是您的Friends
个实例,那么:
var lees = friends.where({ name: 'Lee' });
还有Collection#findWhere
(后面添加的内容,如评论中所述):
findWhere
collection.findWhere(attributes)
就像 where 一样,但只直接返回集合中与传递的属性相匹配的第一个模型。
所以,如果你只是在一个之后,那么你可以这样说:
var lee = friends.findWhere({ name: 'Lee' });
答案 1 :(得分:64)
Backbone集合支持underscorejs find
方法,因此使用它应该有效。
things.find(function(model) { return model.get('name') === 'Lee'; });
答案 2 :(得分:6)
最简单的方法是使用" idAttribute" Backbone Model的选项让Backbone知道你想要使用" name"作为您的模型ID。
Friend = Backbone.Model.extend({
//Create a model to hold friend attribute
name: null,
idAttribute: 'name'
});
现在您可以直接使用Collection.get()方法使用他的名字检索朋友。这样Backbone不会遍历Collection中的所有Friend模型,但可以直接根据其" name"来获取模型。
var lee = friends.get('Lee');
答案 3 :(得分:5)
您可以在Backbone集合上调用findWhere()
,它将返回您正在寻找的模型。
示例:
var lee = friends.findWhere({ name: 'Lee' });