2011-12-08 8 views
37

Ho un modello di giada per il mio progetto node.js. Vorrei inviare un oggetto al modello di giada e passarlo a una funzione all'interno della pagina (per eseguire il rendering di qualcosa).Modello di giada, come passare oggetti concreti alle pagine?

Sono sicuro che mando la stoffa giusta dal server come questo

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

nel client che faccio qualcosa di simile:

script 
    sunburst(#{vizJson}) 

Così, all'interno di una funzione di script, voglio chiama una funzione che crea la mia visualizzazione con qualche json che ho creato sul lato server.

Il problema è che durante il rendering ho qualcosa come sunburst([Object object]). Ho anche provato a inviare la versione con stringa del JSON, ma quando faccio lo JSON.parse(#{vizJson}) si lamenta come Unexpected token &.

Il json che invio è sempre diverso e ha diversi livelli di profondità.

Qualcuno sa cosa fare?

Grazie

risposta

72

Spero che questo possa aiutare qualcuno. Ho risolto in questo modo:

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

Avviso il ! e la {...} avvolgendo il metodo stringa i.

+0

Mi ha aiutato! Grazie –

+0

il mio json è tornato in questo modo: '" {\ "some_key \": ...} "'. Questo potrebbe essere il prodotto di come ho ottenuto l'oggetto json originale, ma per questo esempio ho avvolto l'output in un metodo JSON.parse in-page ("{\" some_key \ ": ...}"). L'oggetto sembrava funzionare correttamente nel browser. – hellatan

+0

Questo è così bello. Grazie mille! – detj

3

Per farlo funzionare, è necessario stringa i sul server.

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

Quindi, come hai detto, analizzare il JSON sul client.

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

Spero che ti aiuti!

+1

Non è necessario chiamare 'JSON.parse' sul client perché il codice è già presente nei tag' script'. – fent

+1

Mi dispiace che non abbia funzionato. Questa è una delle cose che ho provato. Grazie comunque, ho scoperto come farlo. – Masiar

+0

Ah, buona presa. – btford

2

Stranamente, per me la soluzione non ha comportato chiamate allo JSON.parse. Ho limitato il mio oggetto sul server e ho appena usato il metodo !{vizJson} e ho ottenuto il mio oggetto clientide.

Per la documentazione, senza caratteri di escape stringa di interpolazione: http://jade-lang.com/reference/interpolation/

+2

Suppongo che le cose siano cambiate in 5 anni :) grazie per aver trovato il tempo di postare questo! – Masiar

0

Sul lato JS, rispedite

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

Sul lato HTML, ho scoperto che qualcosa di simile:

JSON.parse('!{vizJson}') 

funziona.

Problemi correlati