Compilación de Jade desde un contexto de nodo JS existente

Estoy interesado en usar Jade para crear archivos HTML estáticos de datos generados dinámicamente. Ya tengo un conjunto de scripts JS que están creando mis datos mientras se ejecutan en Node. Lo que me gustaría poder hacer es calcular mis datos y luego compilar mi página HTML usando los objetos JS que creé.

p.ej

var myArry = MyLib.calculateSomeArray();
var myObj = MyLib.createSomeObj();
jade.compile(myTemplate);

Plantilla de jade:

each item in myArry
  li= item
each val, key in myObj
  li #{key}: #{val}

Supongo que este es uno de esos casos en los que es tan obvio que me falta en la documentación, pero no lo veo y las respuestas más cercanas que he visto parecen involucrar a Express, que parece que debería ser innecesario

preguntado el 22 de mayo de 12 a las 19:05

1 Respuestas

yo diría, dado los docs:

var jade = require('jade');

// Create the function
var fn = jade.compile(myTemplate);
var html = fn({ myArry: myArry, myObj: myObj });

Acabo de probar, y esto está funcionando bien:

> var jade = require('jade');
undefined
> var myTemplate = "each item in myArry\n\tli= item\neach val, key in myObj\n\tli #{key}: #{val}"
undefined
> var myObj = { foo: 'bar', woo:'loo' };
undefined
> var myArry = ['moo', 'boo', 'roo'];
undefined
> var fn = jade.compile(tpl);
undefined
> fn({ myArry: myArry, myObj: myObj });
'<li>moo</li><li>boo</li><li>roo</li><li>foo: bar</li><li>woo: loo</li>'

¿Es eso lo que quieres?

contestado el 22 de mayo de 12 a las 20:05

Entiendo. Sí, eso funciona. Diría que eso no quedó claro en los documentos, que nunca se refirieron a 'locales' nuevamente y no explicaron cómo acceder a ellos (oh, deberían ser un hash, ¿y puedes referirte a las claves directamente?) , pero de nuevo, supongo que fue una de esas cosas "demasiado obvias para estar en los documentos". ¡Muchas gracias! - sam fen

¡Eres muy bienvenido! Y sí, cada artículo del locals el objeto se empuja al contexto de la plantilla, por lo que puede acceder a ellos directamente :) - Pierre

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.