2012-01-05 11 views
5

Używam express (framework sieciowy dla node.js) z ejs. Teraz chciałbym stworzyć własny filtr, jak opisano na ejs github page:Jak uzyskać dostęp do obiektu ejs w pliku express.js

To add a filter simply add a method to the .filters object: 

ejs.filters.last = function(obj) { 
    return obj[obj.length - 1]; 
}; 

Pytanie: Jak uzyskać dostęp do obiektu, który EJS? Próbowałem (naiwnie) w app.js:

ejs.filters.myfilter = function (obj) { 
    .... 
} 

który daje mi błąd:

ReferenceError: ejs is not defined 

Odpowiedz

10

Musisz wymagać EJS w aplikacji i ustawić filtr niestandardowy na to, co będzie być widoczne dla twojej aplikacji Express. Zwróć także uwagę na sposób korzystania z filtra ejs w widoku <%=: data_to_be_filtered | your_filter %>.

Przykład zastosowania:

app.js

var app, express = require('express'), ejs = require('ejs'); 

ejs.filters.my_custom_filter = function(ary) { 
    return ary[ary.length - 1]; 
}; 

app = express.createServer(); 

app.configure(function() { 
    app.set('view options', { layout: false }); 
    app.set('view engine', 'ejs'); 
}); 

app.get('/', function(req, res) { 
    res.render('index', { data: [1, 2, 3, 4, 5] }); 
}); 

app.listen(8080); 
console.log('Server started on port 8080'); 

index.ejs (znajduje się w/widokiem)

<%=: data | my_custom_filter %> 

pobrania kod bezpośrednio z github: http://github.com/alessioalex/ejs_filters

Więcej informacji checkout: https://github.com/visionmedia/ejs

+0

Świetnie, dziękuję! Brakowało mi głównie 'require ('ejs')' i dwukropka w '<% ='. – topskip

+0

Cieszę się, że mogę Ci pomóc, nie zapomnij, że możesz również zaakceptować odpowiedź (oprócz głosowania w górę). – alessioalex

+0

czy można użyć filtra z blokiem? <% block ('title', owner | filter_here)%> – chovy

Powiązane problemy