Невозможно отобразить внешние данные JSON в Backbone + Handlebars

0

Я использую Thorax (Backbone + Handlebars) для разработки приложения и пытаюсь загрузить внешний файл JSON, который будет использоваться в шаблоне. Работа с Coffeescript.

Мои тестовые данные JSON:

{
   "name" : "John Doe"
}

Мой шаблон:

Thorax.templates['space'] = Handlebars.compile """
  <h2>Hello, {{name}}.</h2>
"""

Функция успеха моего вызова Ajax:

success: (json) =>
    data = {space: json}
    $(app.appContainer).html(@template(data))

Весь процесс работает до фактического отображения данных в шаблоне. Так что все, что я получаю, это Hello. - Я пробовал следовать инструкциям здесь и присваивал данные JSON объекту, без везения. И прежде чем вы спросите, я проверил console.log 'ed json чтобы проверить, что данные JSON на самом деле проходят.

Какие-либо предложения?

  • 0
    Разве вы не хотите сказать @template(json) вместо того, чтобы оборачивать входящее {name: 'John Doe'} в другой объект?
  • 0
    Это имело бы смысл, я просто делал это из-за ответа, который нашел здесь: stackoverflow.com/questions/11462494/… хотя я попробовал это так, как вы предложили, но безуспешно
Показать ещё 8 комментариев
Теги:
handlebars.js
coffeescript
backbone.js

1 ответ

0
Лучший ответ

Высказывание @template(json) должно работать, если json действительно является объектом { name: 'John Doe' }. Но похоже, что вы получаете строку JSON в аргументе json а не в анализируемом объекте. Это объясняет результаты, которые вы видите из console.log, вывод в консоли больше похож на то, что

console.log("{\n\"name\" : \"John Doe\"\n}")

будет производить, чем то, что

console.log({"name": "John Doe"})

будет производить.

Возможно, ваш сервер отправляет обратно JSON с неправильным Content-Type, поэтому никто не знает, что он должен пройти через JSON.parse до того, как будет вызван ваш обработчик. Попробуйте установить код сервера, чтобы включить заголовок Content-Type: application/json; то вы можете сказать:

success: (json) =>
    $(app.appContainer).html(@template(json))

и он должен работать. Если вы не можете этого сделать, то в крайнем случае вы можете сами проанализировать JSON:

success: (json) =>
    json = JSON.parse(json)
    $(app.appContainer).html(@template(json))

Ещё вопросы

Сообщество Overcoder
Наверх
Меню