web-dev-qa-db-fra.com

ejs 'partial is not defined'

D'accord, j'ai une page d'accueil principalement statique mais je voulais avoir des vues partielles pour la navigation, ect pied de page. J'utilise ejs et cela ressemble à ceci:

mon contrôleur: home.js

// Dependencies
var express = require('express');


    module.exports = {
        get: function(req, res) {
            app.set('view engine', 'ejs');  
            var model = {
            layout:'home',
                    };


            res.render('home');


        }
    };

Mon répertoire de vues a nav, home et footer tous les .ejs

Ensuite, le fichier HTML réel dépourvu de texte se présenterait comme suit.

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" >
<title>Tom Jones</title>

<!-- CSS -->
<link rel="stylesheet" href="/css/home.css" type="text/css" media="screen" >

</head>
<body>

<%- partial('nav') %>

<!--content part -->  
<div id="showcontainer">
        <section>

        </section>
</div>

<div id="maincontainer">
        <section>

        </section>
</div>

</body>
</html>

Le problème Chaque fois que je le teste, je rencontre l'erreur partielle qui n'est pas définie. J'ai essayé d'exiger des ejs mais sans succès.

28
lostAstronaut

Comme l'a dit @Pickels, Partial a été supprimé en 3.x. Cependant, la version la plus récente d'EJS fournit un mécanisme pour inclure les "partiels", appelés "include":

https://github.com/visionmedia/ejs#includes

Les inclusions sont relatives au modèle avec l'instruction include, par exemple si vous avez "./views/users.ejs" et "./views/user/show.ejs" que vous utiliseriez <% include user/show%>. Le ou les fichiers inclus sont littéralement inclus dans le modèle, aucun IO est effectué après la compilation, donc des variables locales sont disponibles pour ces modèles inclus.

Ce qui suit remplacera votre ancienne fonction partial (). Vous devrez apporter des modifications ailleurs pour prendre en charge Express 3.x complètement, mais pour la plupart, cela semble bien fonctionner (mieux en fait - moins de code et plus performant).

<% include nav.ejs %> <!-- replaces your old <%- partial('nav') %> -->
56
Joshua

Le partiel a été supprimé en 3.x. C'est maintenant au moteur de modèles de fournir des partiels.

4
Pickels