有没有办法将辅助函数注册到 EJS 模板,以便可以从任何 EJS 模板调用它们?所以,它应该像这样工作。
应用程序.js
ejs.helpers.sayHi = function(name) {
return 'Hello ' + name;
});
索引.ejs
<%= sayHi('Bob') %>
是的,在 Express 3 中,您可以将助手添加到app.locals
. 前任:
app.locals.somevar = "hello world";
app.locals.someHelper = function(name) {
return ("hello " + name);
}
这些可以在您的视图中访问,如下所示:
<% somevar %>
<% someHelper('world') %>
注意:Express 2.5 使用不同的助手。
我对此有另一种解决方案,我认为它有一些优点:
在您的控制器上:
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' 模块来格式化或解析日期。
这是一个示例过滤器......我不熟悉助手。
var ejs = require('ejs');
ejs.filters.pluralize = function(num, str){
return num == 1 ? str : str+'s';
};
<%=: items.length | pluralize:'Item' %>
如果它为 1,将产生“Item”,或者如果 0 或 > 1,则产生“Items”
应用程序.js
ejs.filters.sayHi = function(name) {
return 'Hello ' + name;
});
索引.ejs
<%=: 'Bob' | sayHi %>
我在用:
在 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") %>
祝你好运