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. Я получаю сообщение об ошибке "Неожиданный идентификатор".
Ответы
Ответ 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 });