web-dev-qa-db-ja.com

Nodejs EJSヘルパー関数?

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

app.js

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

index.ejs

<%= sayHi('Bob') %>
27
Farzher

はい、Express 3ではapp.localsにヘルパーを追加できます。例:

app.locals.somevar = "hello world";

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

これらは、次のようにビュー内でアクセスできます。

<% somevar %>

<% someHelper('world') %>

注:Express 2.5ではヘルパーの動作が異なりました。

31
dylanized

これには別の解決策があり、いくつかの利点があると思います。

  • フィルターをエクスポートするコードを汚さないでください。
  • すべてをエクスポートする必要なしに、任意のメソッドにアクセスします。
  • 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に送信できます。たとえば、「モーメント」モジュールを送信して日付をフォーマットまたは解析できます。

20
robertomarin

これがフィルタの例です...私はヘルパーに慣れていません。

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 %>
3
chovy

使ってます:

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

幸運を

1
IT Vlogs