Подтвердить что ты не робот

Handlebars.js parse object вместо [Object object]

Я использую шаблоны Handlebars, а данные JSON уже представлены в [Объекте объекта], как я разбираю эти данные за пределами Handlebars? Например, я пытаюсь заполнить переменную JavaScript на странице с помощью тега handlebars, но это не работает.

Любые предложения? Спасибо!

EDIT:

Чтобы уточнить, я использую ExpressJS w/Handlebars для шаблонов. На моем пути у меня есть следующее:

var user = {}
user = {'id' : 123, 'name' : 'First Name'}

res.render('index', {user : user});

Затем в моем шаблоне index.hbs теперь у меня есть объект {{user}}. Я могу использовать {{#each}} для сквозного итерации объекта. Тем не менее, я также использую Backbonejs, и я хочу передать эти данные в представление, например:

myView = new myView({user : {{user}});

Проблема заключается в том, что {{user}} просто показывает [Object object] в источнике, если я помещаю его в console.log. Я получаю сообщение об ошибке "Неожиданный идентификатор".

4b9b3361

Ответ 1

При выводе {{user}} Handlebars сначала извлекут значение user .toString(). Для обычного Object s результат по умолчанию - это "[object Object]", который вы видите.

Чтобы получить что-то более полезное, вы либо захотите отобразить определенное свойство объекта:

{{user.id}}
{{user.name}}

Или вы можете использовать /define помощник для форматирования объекта по-разному:

Handlebars.registerHelper('json', function(context) {
    return JSON.stringify(context);
});
myView = new myView({
    user : {{{json user}}} // note triple brackets to disable HTML encoding
});

Ответ 2

Вы можете просто подкрепить JSON:

var user = {}
user = {'id' : 123, 'name' : 'First Name'};
// for print
user.stringify = JSON.stringify(user);

Затем в шаблоне напечатайте:

{{{user.stringify}}};

Ответ 3

Я использую серверные шаблоны в node -js, но это может также применяться на стороне клиента. Я зарегистрирую Jonathan json helper в node. В моем обработчике я добавляю контекст (например, адресную книгу) через res.locals. Затем я могу сохранить клиентскую часть контекстной переменной следующим образом:

<script>
  {{#if addressBook}}
  console.log("addressBook:", {{{json addressBook}}});
  window.addressBook = {{{json addressBook}}};
  {{/if}}
</script>

Обратите внимание на тройные завитки (как указано Джим Лю).

Ответ 4

Вы пытаетесь передать шаблон синтаксиса {{ }} внутри объекта JSON, который недопустим.

Возможно, вам понадобится сделать это:

myView = new myView({ user : user });