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

我有一个模型与几个对象:

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

骨干集合支持underscorejs find方法,所以使用它应该工作。

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

对于简单的基于属性的search,您可以使用Collection#where

其中 collection.where(attributes)

返回与传递的属性相匹配的集合中的所有模型的数组。 对于简单的filter很有用。

所以如果friends是你的Friends实例,那么:

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

还有Collection#findWhere (后面的内容,如评论中所述):

findWhere collection.findWhere(attributes)

就像在哪里 ,但直接返回集合中与传递的属性匹配的第一个模型。

所以如果你只有一个,那么你可以说这样的事情:

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

最简单的方法是使用Backbone Model的“idAttribute”选项让Backbone知道你想用“name”作为你的Model Id。

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

现在你可以直接使用Collection.get()方法来检索一个使用他的名字的朋友。 这种方式Backbone不会循环访问Collection中的所有Friend模型,但可以根据其“名称”直接获取模型。

 var lee = friends.get('Lee'); 

您可以在Backbone集合上调用findWhere() ,它将返回您正在查找的模型。

例:

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