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
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
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'
});
});
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...