web-dev-qa-db-fra.com

Jade template, comment passer des objets concrets aux pages?

J'ai un modèle en jade pour mon projet node.js. Je voudrais envoyer un objet au modèle de jade et le transmettre à une fonction à l'intérieur de la page (pour rendre quelque chose).

Je suis sûr que j'envoie les bons éléments du serveur comme ceci

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

dans le client, je fais quelque chose comme ça:

script
    sunburst(#{vizJson})

Ainsi, dans une fonction de script, je souhaite appeler une fonction qui crée ma visualisation avec certains JSON que j'ai créés côté serveur.

Le problème est que, une fois rendu, j'ai quelque chose comme sunburst([Object object]). J'ai également essayé d'envoyer la version du JSON sous forme de fichier stratifié mais quand je fais JSON.parse(#{vizJson}), il se plaint comme Unexpected token &.

Le JSON que j’envoie est toujours différent et a différents niveaux de profondeur.

Est-ce que quelqu'un sait quoi faire?

Merci

37
Masiar

J'espère que cela va aider quelqu'un. Je l'ai résolu comme ça:

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

Notez le ! et le {...} enveloppant la méthode stringify.

74
Masiar

Pour que cela fonctionne, vous devez stringifier sur le serveur.

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

Ensuite, comme vous l'avez mentionné, analysez le code JSON sur le client.

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

J'espère que cela pourra aider!

3
btford

Curieusement, la solution ne comportait pour moi aucun appel à JSON.parse. J'ai stratifié mon objet sur le serveur et juste utilisé la méthode !{vizJson} et obtenu mon objet côté clients. 

Selon les documents, interpolation de chaîne sans échappement: http://jade-lang.com/reference/interpolation/

2
Airswoop1

Du côté JS, vous renvoyez 

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

Du côté HTML, j'ai trouvé que quelque chose comme:

JSON.parse( '!{vizJson}' )

travaux. 

0
Greg S