31

ヘルパー関数をEJSテンプレートに登録して、任意のEJSテンプレートから呼び出すことができるようにする方法はありますか?したがって、このように機能するはずです。

app.js

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

index.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') %>

注:Express2.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の場合は「アイテム」を生成し、0または>1の場合は「アイテム」を生成します

app.js

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

index.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 に答える