2011-12-08 9 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

コードがすでに 'script'タグの中にあるので、クライアント上で' JSON.parse'を呼び出す必要はありません。 – fent

+1

申し訳ありませんが働いていませんでした。それが私が試したことの一つです。とにかく、ありがとう、私はそれを行う方法を見つけた。 – Masiar

+0

ああ、良いキャッチ。 – btford

2

奇妙なことに、私の解決策は、JSON.parseへの呼び出しを必要としませんでした。私はオブジェクトをサーバー上で文字列化し、ちょうど!{vizJson}メソッドを使用してオブジェクトをクライアント側に持ってきました。ドキュメント毎の

、エスケープ文字列補間: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}') 

が動作します。

関連する問題