Backbone.Collection получить модель по id - программирование
Подтвердить что ты не робот

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() возвращает модель, если в этой коллекции существует модель с данным идентификатором.

4b9b3361

Ответ 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.