2011-12-08 16 views
37

Tengo una plantilla de jade para mi proyecto node.js. Me gustaría enviar un objeto a la plantilla de jade y pasarlo a una función dentro de la página (para representar algo).Plantilla de Jade, ¿cómo pasar un objeto concreto a las páginas?

Estoy seguro de que envío la materia derecha desde el servidor de esta

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

en el cliente que hago algo como esto:

script 
    sunburst(#{vizJson}) 

Por lo tanto, dentro de una función de script, quiero llamar a una función que crea mi visualización con un json creado por el lado del servidor.

El problema es que cuando se procesa tengo algo así como sunburst([Object object]). También traté de enviar la versión codificada de JSON pero cuando lo hago JSON.parse(#{vizJson}) se queja como Unexpected token &.

El json que envío es siempre diferente y tiene diferentes niveles de profundidad.

¿Alguien sabe qué hacer?

Gracias

Respuesta

72

Espero que esto ayude a alguien. Lo resuelto de esta manera:

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

Aviso del ! y la {...} envolver el método stringify.

+0

¡Me ayudó! Gracias –

+0

my json regresó así: '" {\ "some_key \": ...} "'. Este podría ser el producto de cómo obtuve el objeto json original, pero para este ejemplo, envolví el resultado en un método in-page JSON.parse ("{\" some_key \ ": ...}"). El objeto parecía funcionar bien en el navegador. – hellatan

+0

Esto es genial. ¡Muchas gracias! – detj

3

Para que esto funcione, es necesario stringify en el servidor.

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

Luego, como mencionó, analizar el JSON en el cliente.

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

Hope that helps!

+1

No necesita llamar 'JSON.parse' en el cliente porque el código ya está dentro de las etiquetas' script'. – fent

+1

Disculpa que no funcionó. Esa es una de las cosas que probé. Gracias de todos modos, descubrí cómo hacerlo. – Masiar

+0

Ah, buena captura. – btford

2

Curiosamente, para mí la solución no involucraba llamadas al JSON.parse. Codifiqué mi objeto en el servidor y simplemente utilicé el método !{vizJson} y obtuve mi objeto en el lado del cliente.

por los documentos, sin escapar cadena de interpolación: http://jade-lang.com/reference/interpolation/

+2

Supongo que las cosas han cambiado en 5 años :) ¡gracias por tomarse el tiempo de publicar esto! – Masiar

0

En el lado JS, se envía de vuelta

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

En el lado HTML, he encontrado que algo como:

JSON.parse('!{vizJson}') 

funciona.

Cuestiones relacionadas