2012-04-07 3 views
2

У меня есть коллекция, и collection.models возвращает массив моделей. Однако, когда я вызываю collection.get(someId) (и этот id является идентификатором модели, которая находится в массиве collection.models), я получаю undefined. Глядя на collection._byId, он выглядит как пустой объект.Как заполнить массив _byId коллекции Backbone.js, чтобы я мог использовать `get` на нем?

Как правильно заполнить _byId, так что я могу использовать get? Или, возможно, я делаю что-то неправильно при инициализации моей коллекции, поэтому _byId пуст.

+0

Как вы инициализируете свою коллекцию? – kinakuta

+0

Я выполнил [туманную книгу] (http://ui.thoughtbot.com/assets/backbone-js-on-rails-thoughtbot-ebook-august-2011-sample.html) для части инициализации. Я использую json как [this] (https://gist.github.com/2325408) (урезал большинство атрибутов, чтобы быть кратким). Я передаю это в класс контроллера при его создании: 'controller = new MyController (jsonYouSeeAbove)'. Возможно, JSON ошибается? –

+0

Я вижу свою проблему. Используемый мной метод 'to_json' не возвращает правильную последовательность json. Я должен вернуть массив хэшей, как значение «модели» в хеше в основе. –

ответ

0

Поскольку я использую это с Rails, json по умолчанию, созданный Rails, не работает с Backbone. Я не знаю, почему я не видел его, пытаясь узнать Магистраль. Во всяком случае, вы можете либо:

  1. Измените путь Rails генерирует его JSON
  2. Change the way your Backbone app reads the JSON.
3

Я немного опоздал, но, надеюсь, это по-прежнему полезно для некоторых других людей.

Collection._byId является обычным js-хэш-объектом. В этом нет ничего необычного. Если вы хотите, чтобы Collection.get работал, просто добавьте все модели в хэш-файл _byId.

Внутри области видимости коллекции:

var someId = '123'; // any id will do 

this._byId[someId] = someModel; // someModel.id = '123' 

console.log(!!this.get(someId)); // should return true 
0

Похоже, что ОП была немного другая проблема, но я испытал подобный вопрос, и думал, что я после того, что работал для меня.

Как и в оригинальной версии, collection.models содержит правильную модель, но в моем случае хэш-код _byId содержит версию модели cid, которая не была пустой. Тем не менее, _byId не содержал модель с нормальным идентификатором (обычно две версии - id и cid), поэтому я не смог использовать collection.get(id) для ее получения. Моя проблема стала немного яснее, когда я прочитал около cid. В документах:

Идентификаторы клиентов удобны, когда модель еще не сохранена на сервере и еще не имеет своего конечного истинного идентификатора, но уже должна быть видимой в пользовательском интерфейсе.

Я не думаю, что это была проблема с ожиданием сервера в моей cid модели и collection.model имели правильные идентификаторы. Однако прохождение в { wait : true } в качестве опции в collection.create исправило эту проблему для меня.

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

  • Нет связанных вопросов^_^