2012-01-16 10 views
6

Estoy tratando de obtener el motor de plantilla de placa para trabajar con express.js. Mi primer intento fue la siguiente:Express.js motor de plantilla personalizada (placa)

app.register('.html', { 
    compile: function (str, options) { 
     var template = new plate.Template(str); 
     return function(locals) { 
      return template.render(locals, function(err, data) { 
       return data; 
      }); 
     } 
    } 
}); 

veo que el problema es que template.render no devuelve nada (no definido) pero pasa los datos a una devolución de llamada. No estoy seguro de cómo hacerlo funcionar en este caso, ya que Express espera que la función de compilación devuelva una función que devuelve directamente una plantilla procesada cuando se le llama.

Estaba pensando que quizás puedo hacer promesas para resolver este problema, pero tampoco tuve éxito allí ya que el código express no espera que se devuelva una promesa. Im no muy al tanto de las promesas por lo que sólo puede estar haciendo mal:

app.register('.html', { 
    compile: function (str, options) { 
     var promise = new Promise(); 
     var template = new plate.Template(str); 
     return function(locals) { 
      template.render(locals, function(err, data) { 
       promise.resolve(data); 
      }); 
      return promise; 
     } 
    } 
}); 

Aquí es un ejemplo de una implementación personalizada que hace las obras. La diferencia es que ponen de relieve la plantilla plantillas() devuelve directamente a la cadena prestados, así:

app.register('.html', { 
    compile: function (str, options) { 
     var template = _.template(str); 
     return function (locals) { 
      return template(locals); 
     }; 
    } 
}); 

Realmente me gusta usar las plantillas de la placa ya que la etiqueta {% block%} es tan impresionante. Cualquier ayuda es apreciada.

documentación pertinente:

plate's github docs

express.js app.register docs

+0

El creador de la placa agregó rápidamente un parche al proyecto para que sea compatible con Express después de que le pregunté esto. [email protected]+ tiene el cambio y puede ver los detalles de implementación [aquí] (https://github.com/chrisdickinson/plate/wiki/Getting-Started---In-Node) – joshontheweb

+1

Debe agregar una respuesta a esta pregunta y luego aceptarlo si eso es cierto! – tjarratt

Respuesta

5

El creador de la placa añadió rápidamente un parche para el proyecto para que sea compatible con expreso después pedí esto. [email protected]+ tiene el cambio y usted puede ver los detalles de implementación here

Cuestiones relacionadas