web-dev-qa-db-fra.com

Fonctions d'assistance de Nodejs EJS?

Existe-t-il un moyen d’enregistrer des fonctions d’assistance dans les modèles EJS, afin qu’elles puissent être appelées à partir de n’importe quel modèle EJS? Donc, ça devrait marcher quelque chose comme ça.

app.js

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

index.ejs

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

Oui, dans Express 3, vous pouvez ajouter des assistants à app.locals. Ex:

app.locals.somevar = "hello world";

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

Celles-ci seraient accessibles dans vos vues comme ceci:

<% somevar %>

<% someHelper('world') %>

Remarque: Express 2.5 n'a pas aidé les assistants.

29
dylanized

J'ai une autre solution à cela, et je pense que cela présente certains avantages:

  • Ne corrigez pas vos filtres d’exportation de code.
  • Accédez à n’importe quelle méthode sans avoir besoin de toutes les exporter.
  • Meilleure utilisation de l'ejs (no | pipes).

Sur votre contrôleur:

exports.index = function(req, res) {
// send your function to ejs
    res.render('index', { sayHi: sayHi });
}

function sayHi(name) {
    return 'Hello ' + name;
};

Maintenant, vous pouvez utiliser la fonction sayHi dans votre ejs:

<html>
    <h1><%= sayHi('Nice Monkey!') %></h1>
</html>

Vous pouvez utiliser cette méthode pour envoyer des modules à ejs, par exemple, vous pouvez envoyer un module 'moment' pour formater ou analyser des dates.

20
robertomarin

Voici un exemple de filtre ... Je ne connais pas bien les aides.

var ejs = require('ejs');

ejs.filters.pluralize = function(num, str){
    return num == 1 ? str : str+'s';
};


 <%=: items.length | pluralize:'Item' %>

Produira "Item" si c'est 1, ou si 0 ou> 1, produira "Items"

app.js

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

index.ejs

<%=: 'Bob' |  sayHi %>
3
chovy

J'utilise:

Dans helpers/helper.js

var func = {
    sayhi: function(name) {
        return "Hello " + name;
    }, 
    foo: function(date) {
        //do somethings
    }    
};
module.exports = func;

En routeur:

router.get('/', function(req, res, next) {
    res.render('home/index', {
        helper: require('../helpers/helper'),
        title: 'Express'
    });
});

Dans le modèle:

<%= helper.sayhi("Dung Vu") %>

bonne chance

1
Dung Vu