Passer la variable à EJS include

J'ai un en-tête global utilisé dans quelques endroits et j'essayais de définir son emplacement dans une variable qui pourrait être passée lors du rendu d'un modèle.

Quelque Chose comme:

var headerLocation = 'some/location/header.ejs'; 
res.render( viewDir + '/index', {
        header: headerLocation 
    } );

Et dans un fichier modèle:

<% include header %>

En-tête étant la valeur transmise avec le rendu.

Il ne semble pas être possible, mais peut-être que j'ai manqué quelque chose alors pensé que je demanderais ici.

Modifier:

Ceci est mentionné dans les commentaires sur les réponses ci-dessous, mais pour résumer, c'est maintenant disponible dans la version 2 de EJS.

Voir ici: https://github.com/mde/ejs#includes Et discussion connexe ici: https://github.com/tj/ejs/issues/93

21
demandé sur Ruairi O'Brien 2014-01-11 03:18:39

3 réponses

Cette fonctionnalité a été ajoutée: si elle n'est pas path (Fichier introuvable), elle est évaluée comme nom de variable. https://github.com/visionmedia/ejs/pull/156

6
répondu pr.nizar 2014-03-10 01:20:14

Voici un code de démonstration qui peut accomplir des inclusions dynamiques.

Vue

<div flex class="main-container">
    <%- include(page) %>
</div>

Routeur

router.get('/', function (req, res, next) {
    res.render('pages/index', {
        page: 'home'
    });
});
20
répondu Rick 2015-10-07 01:15:33

Même si c'est une vieille question, y répondre pour les autres.

Selon la documentation github, il semble que EJS n'ait aucune notion de blocs, seulement une inclusion à la compilation. Depuis son inclusion à la compilation, vous devez coder en dur l'emplacement.

Il vous reste donc à passer quelques drapeaux et à faire des vérifications if dans l'en-tête ou à analyser l'en-tête en html et à le transmettre à tous les modèles...

4
répondu Murukesh 2014-03-08 19:45:15