31

有没有办法将辅助函数注册到 EJS 模板,以便可以从任何 EJS 模板调用它们?所以,它应该像这样工作。

应用程序.js

ejs.helpers.sayHi = function(name) {
    return 'Hello ' + name;
});

索引.ejs

<%= sayHi('Bob') %>
4

4 回答 4

36

是的,在 Express 3 中,您可以将助手添加到app.locals. 前任:

app.locals.somevar = "hello world";

app.locals.someHelper = function(name) {
  return ("hello " + name);
}

这些可以在您的视图中访问,如下所示:

<% somevar %>

<% someHelper('world') %>

注意:Express 2.5 使用不同的助手。

于 2013-04-19T06:08:00.270 回答
22

我对此有另一种解决方案,我认为它有一些优点:

  • 不要污染您的代码导出过滤器。
  • 无需全部导出即可访问任何方法。
  • 更好的 ejs 使用(无 | 管道)。

在您的控制器上:

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' 模块来格式化或解析日期。

于 2013-08-29T01:42:10.400 回答
4

这是一个示例过滤器......我不熟悉助手。

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 %>
于 2012-11-04T23:49:51.720 回答
4

我在用:

在 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") %>

祝你好运

于 2017-11-16T05:45:37.773 回答