ヘルパー関数をEJSテンプレートに登録して、任意のEJSテンプレートから呼び出せるようにする方法はありますか?したがって、このように機能するはずです。
app.js
ejs.helpers.sayHi = function(name) {
return 'Hello ' + name;
});
index.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に送信できます。たとえば、「モーメント」モジュールを送信して日付をフォーマットまたは解析できます。
これがフィルタの例です...私はヘルパーに慣れていません。
var ejs = require('ejs');
ejs.filters.pluralize = function(num, str){
return num == 1 ? str : str+'s';
};
<%=: items.length | pluralize:'Item' %>
1の場合は「アイテム」を生成します。0または1より大きい場合は「アイテム」を生成します
app.js
ejs.filters.sayHi = function(name) {
return 'Hello ' + name;
});
index.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") %>
幸運を