玉模板,如何将具体对象传递给页面?

时间:2011-12-08 20:31:44

标签: node.js pug

我的node.js项目有一个jade模板。我想将一个对象发送到jade模板并将其传递给页面内的一个函数(以呈现某些内容)。

我确信我会像这样从服务器发送正确的内容

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

在客户端我做这样的事情:

script
    sunburst(#{vizJson})

因此,在脚本函数中,我想调用一个函数来创建我在服务器端创建的json的可视化。

问题在于渲染时我有类似sunburst([Object object])的东西。我也尝试发送JSON的字符串化版本,但当我JSON.parse(#{vizJson})时,它会抱怨Unexpected token &

我发送的json总是不同的,并且具有不同的深度。

有谁知道该怎么做?

由于

4 个答案:

答案 0 :(得分:75)

我希望这会对某人有所帮助。我这样解决了:

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

注意!{...}包装stringify方法。

答案 1 :(得分:3)

要使其正常工作,您需要在服务器上进行字符串化。

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

然后,正如您所提到的,在客户端上解析JSON。

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

希望有所帮助!

答案 2 :(得分:2)

奇怪的是,对我而言,解决方案不涉及JSON.parse。我在服务器上对我的对象进行了字符串化,并使用了!{vizJson}方法并将我的对象设置为客户端。

根据文档,非转义字符串插值:http://jade-lang.com/reference/interpolation/

答案 3 :(得分:0)

在JS方面,你发回

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

在HTML方面,我发现了类似的内容:

JSON.parse( '!{vizJson}' )

的工作原理。