Nodejs EJS 辅助函数?
Posted
技术标签:
【中文标题】Nodejs EJS 辅助函数?【英文标题】:Nodejs EJS helper functions? 【发布时间】:2012-10-24 16:16:24 【问题描述】:有没有办法将辅助函数注册到 EJS 模板,以便可以从任何 EJS 模板调用它们?所以,它应该像这样工作。
app.js
ejs.helpers.sayHi = function(name)
return 'Hello ' + name;
);
index.ejs
<%= sayHi('Bob') %>
【问题讨论】:
这项工作是否与 我编造了ejs.helpers
作为我正在寻找的示例,它不存在。所以这两种方式都没有关系,但你是对的,我可能应该把它切换到<%=
过滤器是不可能的吗?它们类似于助手,并在 EJS github 上预先记录。您的助手将在模板中转换为 <%= 'Bob' | sayHi %>
之类的内容。该函数的编写方式相同。
如果您不是在谈论 visionmedia 的 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 在此页面上帮助解决我的问题的唯一方法是=
在函数 <%= sayHi() %>
之前,否则它不会打印【参考方案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") %>
祝你好运
【讨论】:
以上是关于Nodejs EJS 辅助函数?的主要内容,如果未能解决你的问题,请参考以下文章
我如何编写一个从 mongodb 查询的辅助函数,然后可以为任何 ejs 模板调用此函数
nodejs i18n __与ejs,express不是函数问题