Ответ 1
Надеюсь, это поможет кому-то. Я решил это так:
script
sunburst(!{JSON.stringify(vizJson)})
Обратите внимание, что !
и {...}
завершают метод stringify.
У меня есть шаблон нефрита для моего проекта node.js. Я хотел бы отправить объект в шаблон нефрита и передать его функции внутри страницы (чтобы сделать что-то).
Я уверен, что я отправляю нужные файлы с сервера, как это
res.render(__dirname + '/pages/viz.jade', {
vizJson: newJson,
});
в клиенте я делаю что-то вроде этого:
script
sunburst(#{vizJson})
Таким образом, внутри функции script я хочу вызвать функцию, которая создает мою визуализацию с помощью некоторого json, созданного на стороне сервера.
Проблема в том, что при визуализации у меня есть что-то вроде sunburst([Object object])
. Я также попытался отправить строчную версию JSON, но когда я делаю JSON.parse(#{vizJson})
, он жалуется, как Unexpected token &
.
json я send всегда отличается и имеет разный уровень глубины.
Кто-нибудь знает, что делать?
Спасибо
Надеюсь, это поможет кому-то. Я решил это так:
script
sunburst(!{JSON.stringify(vizJson)})
Обратите внимание, что !
и {...}
завершают метод stringify.
Чтобы это сработало, вам необходимо скрепить на сервере.
res.render(__dirname + '/pages/viz.jade', {
vizJson: JSON.stringify(newJson),
});
Затем, как вы упомянули, проанализируйте JSON на клиенте.
script
sunburst(JSON.parse(#{vizJson}))
Надеюсь, что это поможет!
Как ни странно, для меня решение не вызвало вызовов JSON.parse
. Я стягивал свой объект на сервере и просто использовал метод !{vizJson}
и получил свой объект clientide.
В документах, неизолированная интерполяция строк: http://jade-lang.com/reference/interpolation/
На стороне JS вы отправляете назад
res.render(__dirname + '/pages/viz.jade', {
vizJson: JSON.stringify(newJson),
});
На стороне HTML я обнаружил, что что-то вроде:
JSON.parse( '!{vizJson}' )
работает.