2012-02-09 16 views
5

Hola, me gustaría saber cómo puedo renderizar en el motor de plantillas dot.js. Creo que es una pregunta genérica sobre las plantillas de nodejs (lea los comentarios para más información). La razón por la que elegí este motor de plantillas en lugar de jade o ejs es porque parece el motor más rápido.¿Cómo renderizar doT.js en plantillas en nodejs?

Aquí está mi app.js:

var express = require('express'), 
    app = express.createServer(), 
    doT = require('doT'), 
    pub = __dirname + '/public', 
    view = __dirname + '/views'; 

app.configure(function(){ 
    app.set('views', view); 
    app.set('view options', {layout: false}); 
    app.set('view engine', 'dot'); 
    app.use(app.router); 
}); 

app.register('.html', { 
    compile: function(str, opts){ 
     return function(locals){ 
      return str; 
     } 
    } 
}); 


app.get('/', function(req, res){ 

    //This is where I am trying to send data to the front end.... 
    res.render('index.html', { output: 'someStuff' }); 

}); 

Aquí está mi html:

<!DOCTYPE html> 
<html> 
<head> 
<meta charset='utf-8'> 
<title>Index</title> 
</head> 
<body> 

//This is where I am trying to receive data and output it... 
{{=it.output}} 

</body> 
</html> 

simplemente no podía encontrar buenos documentos en él. Esto no fue suficiente: http://olado.github.com/doT/. Por favor ayuda si puedes. Esto mejorará mi comprensión exponencial de cómo se pasan los datos a la vista en nodejs. Gracias.

Respuesta

14

es necesario dejar que saber expreso para utilizar DOT como el motor de la plantilla de esta manera:

app.set("view engine", "html"); 
app.register('.html', doT); 
+0

Gracias, eso pareció funcionar. Siempre sale para obtener una respuesta del creador. Todavía tengo que averiguar cómo iterar sobre los registros que saco de mongodb, pero esa será otra pregunta ... Gracias. – user000001

+0

Hola, tal vez podrías ver en [esto] (http://stackoverflow.com/questions/9252191/show-all-of-data-comming-from-mongodb-and-render-it-in-dot-js- motor de plantillas), se basa en la que respondiste aquí. Creo que eres el más calificado para hacer frente a esta pregunta. Por favor ayuda si puedes. – user000001

+0

¿Puedes mirar este problema? Http://stackoverflow.com/questions/9252191/show-all-of-data-comming-from-mongodb-and-render-it-in-dot-js-templating-engine – user000001

1

Si está ejecutando expreso 3, no es compatible todavía. Sin embargo, puede utilizar expreso de puntos:

npm install express-dot

Luego de configure

app.set('view engine', 'dot'); 
app.engine('dot', require('express-dot').__express); 

Luego, en rutas:

res.render('profile', {}); // you will need to create views/profile.dot 
5

Mi puesto es un enchufe descarado, pero podría ayudar a alguien fuera.

yo no estaba muy contento con el comportamiento de los módulos existentes trabajaron con expreso 3.x, escribí una llamada punto-emc:

https://github.com/nerdo/dot-emc

uso es similar a lo que se ha publicado anteriormente. Instálelo con nom:

npm install dot-emc 

A continuación, configúrelo como su motor de visualización predeterminado. Yo prefiero usar la extensión .def ya que mi editor de texto reconoce los archivos como archivos .dot Graphviz, por lo que la sintaxis es ligeramente diferente:

app.engine("def", require("dot-emc").__express); 
app.set("view engine", "def"); 

entonces se puede empezar a usarlo como lo haría con cualquier otro motor de vista en sus rutas, por ejemplo:

app.get("/", function(req, res) { 
    res.render("index", {"title": "title goes here"}); 
}); 
+0

Dado que su enchufe está destinado a ayudar a las personas, es bienvenido, después de todo este fue el objetivo de este sitio, para ayudar ... – user000001

+0

Gracias cue8chalk. Esto fue más difícil de lo que debería ser encontrarlo. – Druska

1

sé que esto es una cuestión de edad, pero recientemente me quería poner a prueba DOT con una aplicación 4.xx expreso estándar generada. No encontré el ejemplo expreso de @olado para que coincida fácilmente con mi aplicación generada. Probé diferentes complementos (poniéndolo a trabajar, pero no estoy satisfecho), así que terminé escribiendo el motor de plantillas así para obtener archivos de puntos precompilados con soporte para incluye (#) sin ningún complemento adicional:

var users = require('./routes/users'); 
// Standard app above this 

var dot = require("dot").process({ 
    path: (__dirname + "/views") 
}); 

var app = express(); 

// view engine setup 
app.engine('dot', function(template, options, cb){ 
    // using .dot files 
    var temp = path.parse(template).name; 

    var cont = dot[temp](options); 

    return cb(null, cont); 


    // Or as one liner 
    // return cb(null, dot[path.parse(template).name](options)); 

    // If you want to do error checking, return the error as callback functions first arg 
    // return cb(new Error('Something went wrong'); 
}); 

app.set('views', path.join(__dirname, './views')); 
app.set('view engine', 'dot'); 

// Standard generated app below this 

Ahora lo puedo usar en la forma estándar "res.render" en las rutas de este tipo (por index.js):

/* GET home page. */ 
router.get('/', function(req, res, next) { 
    res.render('index', { title: 'Express' }); 
}); 

Recuerde usar {{}} it.value en el .dot archivos de plantilla. En el ejemplo básico anterior, el índice.dot se vería algo como esto:

<!DOCTYPE html> 
<html> 
    <head> 
    <title>{{=it.title}}</title> 
    <link rel='stylesheet' href='/stylesheets/style.css' /> 
    </head> 
    <body> 
    <h1>{{=it.title}}</h1> 
    <p>Welcome to {{=it.title}}</p> 
    </body> 
</html>