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

因此,如果friends是您的Friends实例,则:

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

还有Collection#findWhere(如评论中所述,稍后添加):

找哪里 collection.findWhere(attributes)

就像where一样,只是直接返回集合中与传递的属性匹配的第一个模型。

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

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 模型的“idAttribute”选项让 Backbone 知道您想使用“名称”作为模型 ID。

 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()Backbone 集合,它将完全返回您正在寻找的模型。

例子:

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