2017-05-23 1 views
0

J'essaie d'inclure un fichier ejs qui contient des fonctions pour configurer mes vues. Ces fonctions ont été définies pour être utilisées comme aide. Je l'ai essayé d'utiliser:EJS inclut des fonctions définies dans un fichier ejs séparé

<% include helpers.ejs %> 

Mais lorsque je tente d'utiliser la fonction de ce fichier:

<% module_start('$body', [{name:'display',value:'block'}], 'body'); %> 

j'obtiens l'erreur:

Reference Error: module_start is not defined 

Lorsque je copie sur le code de 'helpers.ejs' à mon fichier de vue original, 'test.ejs', cela fonctionne comme prévu. Je suis passé par plusieurs réponses et, encore, je suis confus ce que je fais à tort dans ce cas.

Merci pour votre aide à l'avance.

Répondre

2

Après des heures éprouvantes à essayer toutes les solutions imaginées, je suis tombé sur une solution qui fonctionne. La solution a été empruntée à:

EJS Functions

Regarder la solution présentée dans ce code, je mis à jour mes 'helpers.ejs' à 'helpers.js'. Par la suite, j'ai ajouté les fonctions exportées de « helpers.js » aux EJS rendent objet de contexte:

const ejs_helpers = require('path/to/helpers.js'); 

... 

ejs.renderFile('filename', { helpers:ejs_helpers, ...}, (err,data)=>{}); 

Dans le fichier de vue EJS:

<%- helpers.function_name(params); %> 

Cela change considérablement la façon dont je me suis approché d'abord le problème . Avec le fichier d'assistance simple ejs, les fonctions incluent du code HTML entre les instructions de flux de contrôle. Dans le cas présenté ici, les fonctions renvoie une chaîne simple. Notez le '-' avec la balise 'Scriptlet'.

Espérons que cela aide quelqu'un.

+0

m'a certainement aidé, merci – AntK

+0

vous êtes les bienvenus. –