Existe-t-il un moyen d’enregistrer des fonctions d’assistance dans les modèles EJS, afin qu’elles puissent être appelées à partir de n’importe quel modèle EJS? Donc, ça devrait marcher quelque chose comme ça.
app.js
ejs.helpers.sayHi = function(name) {
return 'Hello ' + name;
});
index.ejs
<%= sayHi('Bob') %>
Oui, dans Express 3, vous pouvez ajouter des assistants à app.locals
. Ex:
app.locals.somevar = "hello world";
app.locals.someHelper = function(name) {
return ("hello " + name);
}
Celles-ci seraient accessibles dans vos vues comme ceci:
<% somevar %>
<% someHelper('world') %>
Remarque: Express 2.5 n'a pas aidé les assistants.
J'ai une autre solution à cela, et je pense que cela présente certains avantages:
Sur votre contrôleur:
exports.index = function(req, res) {
// send your function to ejs
res.render('index', { sayHi: sayHi });
}
function sayHi(name) {
return 'Hello ' + name;
};
Maintenant, vous pouvez utiliser la fonction sayHi dans votre ejs:
<html>
<h1><%= sayHi('Nice Monkey!') %></h1>
</html>
Vous pouvez utiliser cette méthode pour envoyer des modules à ejs, par exemple, vous pouvez envoyer un module 'moment' pour formater ou analyser des dates.
Voici un exemple de filtre ... Je ne connais pas bien les aides.
var ejs = require('ejs');
ejs.filters.pluralize = function(num, str){
return num == 1 ? str : str+'s';
};
<%=: items.length | pluralize:'Item' %>
Produira "Item" si c'est 1, ou si 0 ou> 1, produira "Items"
app.js
ejs.filters.sayHi = function(name) {
return 'Hello ' + name;
});
index.ejs
<%=: 'Bob' | sayHi %>
J'utilise:
Dans helpers/helper.js
var func = {
sayhi: function(name) {
return "Hello " + name;
},
foo: function(date) {
//do somethings
}
};
module.exports = func;
En routeur:
router.get('/', function(req, res, next) {
res.render('home/index', {
helper: require('../helpers/helper'),
title: 'Express'
});
});
Dans le modèle:
<%= helper.sayhi("Dung Vu") %>
bonne chance