【问题标题】:Nodejs EJS helper functions?Nodejs EJS 辅助函数?
【发布时间】:2012-10-24 16:16:24
【问题描述】:

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

app.js

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

index.ejs

<%= sayHi('Bob') %>

【问题讨论】:

  • 这项工作是否与
  • 我编造了ejs.helpers 作为我正在寻找的示例,它不存在。所以这两种方式都没有关系,但你是对的,我可能应该把它切换到&lt;%=
  • 过滤器是不可能的吗?它们类似于助手,并在 EJS github 上预先记录。您的助手将在模板中转换为 &lt;%= 'Bob' | sayHi %&gt; 之类的内容。该函数的编写方式相同。
  • 如果您不是在谈论 visionmedia 的 ejs,我深表歉意。在这里草草下结论。
  • 我试图测试使用过滤器是否真的有效,并允许我传递多个参数。我想如果我将一个对象作为参数传递,那将起作用。不过,这感觉像是一种解决方法。

标签: node.js express ejs


【解决方案1】:

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

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”

app.js

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

index.ejs

<%=: 'Bob' |  sayHi %>

【讨论】:

  • 仅供参考,这不再适用于 EJS V2。 Dilanized 和 Robertomarin 在这两个版本中都有效。
【解决方案2】:

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

app.locals.somevar = "hello world";

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

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

<% somevar %>

<% someHelper('world') %>

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

【讨论】:

  • 你在哪里写这样的代码?一个链接会很有帮助。
  • 你可以在应用程序主体中编写这段代码,在做完 var app = express();
  • 哼。我只是没有app,因为它被sails.js重载了,把它写到app.js中可能是个坏主意,我宁愿把它写到另一个由app.js调用的文件中
  • config 文件夹中的 middleware.js 在github.com/stefanbuck/sails-social-auth-example 中为您提供了如何操作的指示。你可以在那里定义它
  • 我发现 .ejs 文档中的调用需要使用 equals:.
【解决方案3】:

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

  • 不要污染您的代码导出过滤器。
  • 无需全部导出即可访问任何方法。
  • 更好地使用 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' 模块来格式化或解析日期。

【讨论】:

  • +1 在此页面上帮助解决我的问题的唯一方法是 = 在函数 &lt;%= sayHi() %&gt; 之前,否则它不会打印
【解决方案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") %>

祝你好运

【讨论】:

    猜你喜欢
    • 2016-04-02
    • 2020-10-21
    • 1970-01-01
    • 2014-01-23
    • 2021-05-24
    • 1970-01-01
    • 1970-01-01
    • 2023-03-27
    • 2015-02-19
    相关资源
    最近更新 更多