2011-12-08 53 views
37

我有我的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总是不同的,并且具有不同的深度级别。

有谁知道该怎么办?

谢谢

回答

72

我希望这会帮助某人。我解决了它这样的:

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

通知的!{...}包裹字符串化方法。

+0

它帮助我!谢谢 –

+0

我的json回来了,像这样:''{\“some_key \”:...}“'。这可能是我如何获得原始json对象的产物,但对于此示例,我将输出封装在页内JSON.parse(“{\”some_key \“:...}”)方法中。该对象似乎在浏览器中正常工作。 – hellatan

+0

这太酷了。非常感谢! – detj

3

为了这个工作,你需要在服务器上进行串联。

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

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

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

希望有所帮助!

+1

您不需要在客户端调用'JSON.parse',因为代码已经在'script'标签内。 – fent

+1

对不起,没有奏效。这是我尝试过的一件事。无论如何,我发现如何去做。 – Masiar

+0

啊,很好。 – btford

2

奇怪的是,对我来说,解决方案没有调用JSON.parse。我在服务器上对我的对象进行了字符串处理,并使用了!{vizJson}方法,并获得了我的对象clientside。

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

+2

我估计事情已经在5年内发生了变化:)感谢您抽出宝贵时间发布此信息! – Masiar

0

在JS端,您发回

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

在HTML方面,我发现这样的:

JSON.parse('!{vizJson}') 

工程。

相关问题