Доступ к вложенным объектам JSON в Backbone

У меня есть простой сценарий, в котором я возвращаю JSON с вложенными объектами с бэкэндом Rails. У меня проблемы с доступом к атрибутам вложенного объекта.

Пример JSON:

[{
  category_id: 2,
  id: 34,
  name: "red",
  category: {
    name: "color"
  }
},
{
  category_id: 2,
  id: 35,
  name: "blue",
  category: {
    name: "color"
  }
}]

Скажем, я хочу получить доступ к цвету категории для элемента с идентификатором 35, это отлично работает в консоли:

collection = new App.Collections.Colors()
collection.fetch()
model = collection.get(35)
model.get('category').name

В моих эко-шаблонах я получаю сообщение об ошибке «Невозможно прочитать имя свойства неопределенного значения». Однако мой шаблон по-прежнему показывает, что я могу получить доступ к объекту с помощью [object Object], если я укажу только

<%= model.get('category') %>

Есть идеи? Я уверен, что не понимаю чего-то фундаментального.

ОБНОВЛЕНО

Я понял, что некоторые имена категорий были нулевыми, что вызывало ошибку. Приведенный выше код должен быть в порядке.


person Reza Parang    schedule 04.07.2013    source источник
comment
Я просто понимаю, что не все мои предметы имеют сохраненное имя, что вызывало ошибку undefined. Я должен быть более осторожным :)   -  person Reza Parang    schedule 04.07.2013


Ответы (1)


Кажется, что ваш JSON искажен.

Согласно спецификации JSON, вам необходимо заключить ключи в кавычки.

Вместо этого попробуйте следующее:

[{
  "category_id": 2,
  "id": 34,
  "name": "red",
  "category": {
    "name": "color"
  }
},
{
  "category_id": 2,
  "id": 35,
  "name": "blue",
  "category": {
    "name": "color"
  }
}]
person John Dong    schedule 04.07.2013
comment
Джон, хороший улов, хотя в конце концов некоторые из моих названий категорий были нулевыми, что вызывало ошибку! - person Reza Parang; 04.07.2013
comment
Ах я вижу. Тогда у вас может быть что-то вроде <% if (typeof model != 'undefined' && typeof model.get('category') != 'undefined' && typeof model.get('category').name != 'undefined' { %> <%= model.get('category').name %> <% } %>, чтобы убедиться, что имя не равно нулю - person John Dong; 04.07.2013