Шаблон Jade, как передать конкретный объект на страницы?

У меня есть шаблон нефрита для моего проекта 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 всегда отличается и имеет разный уровень глубины.

Кто-нибудь знает, что делать?

Спасибо

Ответ 1

Надеюсь, это поможет кому-то. Я решил это так:

script
    sunburst(!{JSON.stringify(vizJson)})

Обратите внимание, что ! и {...} завершают метод stringify.

Ответ 2

Чтобы это сработало, вам необходимо скрепить на сервере.

res.render(__dirname + '/pages/viz.jade', {
    vizJson: JSON.stringify(newJson),
});

Затем, как вы упомянули, проанализируйте JSON на клиенте.

script
    sunburst(JSON.parse(#{vizJson}))

Надеюсь, что это поможет!

Ответ 3

Как ни странно, для меня решение не вызвало вызовов JSON.parse. Я стягивал свой объект на сервере и просто использовал метод !{vizJson} и получил свой объект clientide.

В документах, неизолированная интерполяция строк: http://jade-lang.com/reference/interpolation/

Ответ 4

На стороне JS вы отправляете назад

res.render(__dirname + '/pages/viz.jade', {
    vizJson: JSON.stringify(newJson),
});

На стороне HTML я обнаружил, что что-то вроде:

JSON.parse( '!{vizJson}' )

работает.