2012-02-09 15 views
5

Witam Chciałbym wiedzieć, jak mogę renderować dane wyjściowe w templating engine dot.js. Myślę, że to ogólne pytanie o szablonach nodej. (Przeczytaj komentarze, aby uzyskać więcej informacji). Powodem, dla którego wybrałem ten silnik szablonowy zamiast jade lub ejs, jest to, że wydaje się on najszybszym silnikiem.Jak renderować szablon doT.js w temacie nodejs?

Oto moje 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' }); 

}); 

Tu jest mój 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> 

ja po prostu nie mógł znaleźć dobre dokumenty na jej temat. To nie wystarczy: http://olado.github.com/doT/. Jeśli możesz, pomóż. Usprawni to moje wykładniczo sposób przekazywania danych do widoku w nodejs. Dziękuję Ci.

Odpowiedz

14

Musisz pozwolić express wiedzieć, aby korzystać z kropką jako silnik szablonu tak:

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

Dzięki, że wydawało się, że działa. Zawsze wychodzi, aby uzyskać odpowiedź od twórcy. Nadal muszę wymyślić, jak powtórzyć rekordy, które wyciągam z mongody, ale to będzie kolejne pytanie ... Dzięki. – user000001

+0

Witam, może mógłbyś zajrzeć do [this] (http://stackoverflow.com/questions/9252191/show-all-of-data-comming-from-mongodb-and-render-it-in-dot-js- templating-engine) pytanie, które jest oparte na tym, na który tu odpowiedziałeś. Myślę, że jesteś najbardziej wykwalifikowany, aby rozwiązać to pytanie. Pomóż, jeśli możesz. – user000001

+0

Czy możesz zajrzeć do tego problemu http://stackoverflow.com/questions/9252191/show-all-of-data-comming-from-mongodb-and-render-it-in-dot-js-templating-engine – user000001

1

Jeśli używasz wyraźnej 3, to nie jest jeszcze obsługiwany. Można jednak użyć Express-DOT:

npm install express-dot

potem w configure

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

potem w trasach:

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

mój post jest bezwstydna, ale może komuś pomóc na zewnątrz.

nie byłem bardzo zadowolony ze sposobu istniejących modułów pracował z Express, 3.x, napisałem jeden zwany dot-EMC:

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

użycie jest podobne do tego, co zostało wysłane powyżej. Zainstaluj go pod nazwą:

npm install dot-emc 

Następnie skonfiguruj go jako domyślny mechanizm wyświetlania. Wolę używając rozszerzenia .def ponieważ mój edytor tekstu uznaje .dot pliki jako pliki Graphviz, więc składnia jest nieco inna:

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

Następnie można zacząć używać go jak każdy inny silnik widok w swoich tras, np .:

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

Ponieważ Twoja wtyczka ma na celu pomóc ludziom, jest mile widziana, po tym wszystkim był cały punkt tej strony, aby pomóc ... – user000001

+0

Dzięki cue8chalk. Było to trudniejsze niż powinno się znaleźć. – Druska

1

Wiem, że to stare pytanie, ale ostatnio chciałem przetestować doT ze standardową generowaną aplikacją Express 4.xx. Nie znalazłem wyraźnego przykładu z @olado, aby dopasować łatwe z moją wygenerowaną aplikacją. Próbowałem różnych wtyczek (uruchomiłem to, ale nie usatysfakcjonowałem), więc napisałem taki szablon, aby uzyskać skompilowane pliki dot z obsługą włączania (#) bez dodatkowej wtyczki:

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 

teraz można go używać w standardowym "res.render" sposób na trasach takich jak ta (dla index.js):

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

Pamiętaj, aby używać {{}} it.value w .dot pliki szablonów. W podstawowym przykładzie powyżej indeks.kropka wyglądałaby mniej więcej tak:

<!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> 
Powiązane problemy