Нефритовый шаблон, как передать конкретный объект на страницы? - PullRequest
37 голосов
/ 09 декабря 2011

У меня есть шаблон Jade для моего проекта node.js.Я хотел бы отправить объект в шаблон Jade и передать его функции внутри страницы (для визуализации чего-либо).

Я уверен, что отправляю нужные данные с сервера, как этот

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

в клиенте я делаю что-то вроде этого:

script
    sunburst(#{vizJson})

Таким образом, внутри функции скрипта я хочу вызвать функцию, которая создает мою визуализацию с помощью некоторого json, который я создал на стороне сервера.

Проблема в том, что при рендеринге у меня есть что-то вроде sunburst([Object object]).Я также пытался отправить строковую версию JSON, но когда я выполняю JSON.parse(#{vizJson}), он жалуется на Unexpected token &.

Отправляемый мной json всегда отличается и имеет разный уровень глубины.

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

Спасибо

Ответы [ 4 ]

76 голосов
/ 09 декабря 2011

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

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

Обратите внимание на ! и {...}, упаковывающие метод stringify.

3 голосов
/ 09 декабря 2011

Для того, чтобы это работало, вам нужно выполнить строковое преобразование на сервере.

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

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

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

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

2 голосов
/ 17 июня 2016

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

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

0 голосов
/ 08 мая 2017

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

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

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

JSON.parse( '!{vizJson}' )

работает

...