有没有办法将辅助函数注册到EJS模板,以便可以从任何EJS模板调用它们?所以,它应该是这样的。
app.js
ejs.helpers.sayHi = function(name) {
return 'Hello ' + name;
});
index.ejs
<%= sayHi('Bob') %>
答案 0 :(得分:31)
是的,在Express 3中,您可以向app.locals
添加帮助程序。例如:
app.locals.somevar = "hello world";
app.locals.someHelper = function(name) {
return ("hello " + name);
}
这些可以在您的视图中访问,如下所示:
<% somevar %>
<% someHelper('world') %>
注意:Express 2.5的助手方式不同。
答案 1 :(得分:20)
我有另一个解决方案,我认为它有一些优点:
在您的控制器上:
exports.index = function(req, res) {
// send your function to ejs
res.render('index', { sayHi: sayHi });
}
function sayHi(name) {
return 'Hello ' + name;
};
现在你可以在你的ejs中使用sayHi函数了:
<html>
<h1><%= sayHi('Nice Monkey!') %></h1>
</html>
您可以使用此方法将模块发送到ejs,例如,您可以发送'moment'模块来格式化或解析日期。
答案 2 :(得分:3)
这是一个示例过滤器......我不熟悉助手。
var ejs = require('ejs');
ejs.filters.pluralize = function(num, str){
return num == 1 ? str : str+'s';
};
<%=: items.length | pluralize:'Item' %>
如果为1,则生成“Item”,或者如果为0或&gt; 1,产生“项目”
app.js
ejs.filters.sayHi = function(name) {
return 'Hello ' + name;
});
index.ejs
<%=: 'Bob' | sayHi %>
答案 3 :(得分:1)
我正在使用:
在helpers / helper.js
中var func = {
sayhi: function(name) {
return "Hello " + name;
},
foo: function(date) {
//do somethings
}
};
module.exports = func;
在路由器中:
router.get('/', function(req, res, next) {
res.render('home/index', {
helper: require('../helpers/helper'),
title: 'Express'
});
});
在模板中:
<%= helper.sayhi("Dung Vu") %>
古德勒克