Backbone.Collection получить модель по id
У меня есть коллекция, которая извлекает модели с сервера.
Это работает, теперь я хочу захватить модель по id с помощью MyCollection.at(0)
, и я получаю:
child
_changes: Array[0]
_changing: false
_currentAttributes: Object
_events: Object
_hasComputed: true
_pending: false
_previousAttributes: Object
attributes: Object
_id: "50ef7a63b2a53d17fe000001"
author_name: "author name"
bookmark: ""
info: "bookmark description"
__proto__: Object
changed: Object
cid: "c26"
collection: child
view: child
__proto__: Surrogate
Если я попытаюсь получить модель по ее идентификатору, я получаю:
MyCollection.get("50ef7a63b2a53d17fe000001")
=> undefined
MyColleciton.get({_id:"50ef7a63b2a53d17fe000001"})
=> undefined
MyCollection.get({'_id':"50ef7a63b2a53d17fe000001"})
=> undefined
Я не понимаю, что документы говорят, что метод .get()
возвращает модель, если в этой коллекции существует модель с данным идентификатором.
Ответы
Ответ 1
Установили ли вы Model.idAttribute
модель?
var Model = Backbone.Model.extend({
idAttribute:"_id"
});
По умолчанию Backbone ожидает, что свойство id будет называться id. Когда параметр idAttribute
установлен, Backbone стандартизирует обработку идентификаторов, так что model.id
всегда доступен, даже если свойство id называется чем-то другим. Исходное свойство id доступно в хеше модели attributes
и, как таковое, с помощью get
metd. Итак:
model.id === model.get('_id') // -> true
Ответ 2
Вы можете использовать атрибут cid
(идентификатор на стороне клиента) модели в качестве аргумента для MyCollection.get()
, который, как гарантируется, существует при создании. Документация, похоже, думает, что это сработает, см. http://backbonejs.org/#Collection-get.