Ответ 1
Коллекции backbone поддерживают метод underscorejs find
, поэтому использование этого должно работать.
things.find(function(model) { return model.get('name') === 'Lee'; });
У меня есть модель с несколькими объектами:
//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
. Но я думаю, что должен быть еще более простой способ сделать это.
Коллекции backbone поддерживают метод underscorejs find
, поэтому использование этого должно работать.
things.find(function(model) { return model.get('name') === 'Lee'; });
Для простых поисков с использованием атрибутов вы можете использовать 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' });
Самый простой способ - использовать опцию idAttribute для модели Backbone, чтобы позволить 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');
Вы можете вызвать findWhere()
в коллекциях Backbone, которые вернут именно ту модель, которую вы ищете.
Пример:
var lee = friends.findWhere({ name: 'Lee' });