2013-09-10 5 views
0

У меня есть коллекция, которая задает модель, которая сама имеет набор idAttribute, так как мой бэкэнд использует настраиваемое поле для первичного ключа. Код выглядит так:Невозможно получить idAttribute для работы в Backbone

var SearchItemModel = Backbone.Model.extend({ 
    idAttribute: 'searchDefId' 
}); 

var savedSearchesCollection = new SavedSearchesCollection({ 
    model: SearchItemModel 
}); 

Это мое понимание того, что я должен быть в состоянии найти модель, делая that.collection.get(searchDefIdValue), но я не могу. Ниже вы можете видеть, что моя коллекция имеет две модели. Если я попытаюсь получить модель, основанную на силе Backbone's 'c44', тогда это не вызовет проблем. Но если я попытаюсь выполнить поиск по пользовательскому полю id 'searchDefId', он не сможет его найти. Я думал, что Backbone должен был скопировать значение idAttribute в id, но я не вижу никакого поля «id».

Также обратите внимание, что я могу найти модель, используя that.collection.where({ searchDefId: data.searchDefId})[0], но похоже, что это может быть дороже.

console output

ответ

2

Я думаю, что проблема в том, что вы передаете options в качестве первого аргумента SavedSearchesCollection когда Backbone.Collection ожидает, что это будет models. Это также подтверждается отсутствием имущества model на that.collection.

Попробуйте

var savedSearchesCollection = new SavedSearchesCollection([], { 
    model: SearchItemModel 
}); 
+2

И обычно вы бы указать 'модель: SearchItemModel' при создании' SavedSearchesCollection', а не при создании экземпляра коллекции. –

+0

Не повезло. Я уверен, что это необязательный параметр. В противном случае, как будет выглядеть представление вообще. –

+0

@muistooshort: Как и большинство вещей в Backbone, вы можете указать его в классе или при создании экземпляра. Сам протокол Backbone показывает, что это делается в обоих направлениях: http://backbonejs.org/#Collection –

Смежные вопросы