2012-01-16 13 views
6

Sto cercando di far funzionare il motore di template delle lastre con express.js. Il mio primo tentativo è stato questo:Motore del modello personalizzato Express.js (piastra)

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; 
      }); 
     } 
    } 
}); 

vedo che il problema è che template.render non restituisce nulla (non definito), ma passa i dati a un callback. Non sono sicuro di come farlo funzionare in questo caso, in quanto Express si aspetta che la funzione di compilazione restituisca una funzione che restituisce direttamente un modello renderizzato quando viene chiamato.

Stavo pensando che forse potrei usare le promesse per risolvere questo problema ma non ci sono riuscito neanche da quando il codice espresso non prevede una promessa da restituire. Im non troppo fino a velocità sulle promesse così mi può solo essere facendo male:

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; 
     } 
    } 
}); 

Ecco un esempio di un'implementazione personalizzata che fa le opere. La differenza è che sottolineano modello modelli() restituisce direttamente la stringa reso in questo modo:

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

Mi piacerebbe davvero utilizzare i modelli Targa in quanto il tag {% block%} è così impressionante. Qualsiasi aiuto è apprezzato.

documentazione pertinente:

plate's github docs

express.js app.register docs

+0

Il creatore di lastra ha prontamente aggiunto una patch al progetto per renderla compatibile con express dopo che l'ho chiesto. [email protected]+ ha la modifica e puoi vedere i dettagli di implementazione [qui] (https://github.com/chrisdickinson/plate/wiki/Getting-Started---In-Node) – joshontheweb

+1

Devi aggiungere una risposta a questa domanda e poi accettala se è vera! – tjarratt

risposta

5

Il creatore della piastra prontamente aggiunto una patch per il progetto per renderlo compatibile con espresso dopo che ho chiesto questo. [email protected]+ ha la modifica e puoi vedere i dettagli di implementazione here

Problemi correlati