2012-07-05 36 views
26

好吧我有一个主要是静态的主页,但我想有导航,页脚等部分视图。我使用EJS和它看起来像这样:ejs的部分没有定义'

我的控制器: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'); 


     } 
    }; 

我的观点目录已NAV,家庭和页脚所有.ejs

那么实际的HTML文件剥离的文字看起来如下。

<!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> 

的问题 当曾经我测试出来我跑入误差的部分没有被定义。我试过要求ejs但没有成功。

回答

4

3.x部分被删除。现在由模板引擎来提供部分。

+1

截至ejs或express – lostAstronaut 2012-07-05 20:42:44

+0

ejs。有一个express.js和大量模板引擎的桥梁项目,这个引擎被称为consolidate.js,可以在这里找到:https://github.com/visionmedia/consolidate.js – Pickels 2012-07-05 22:42:42

+6

具有讽刺意味的是,这只是一个'部分'回答。您能否提供关于如何使用consolidationate.js在Express 3.x和EJS中工作的解释? – Joshua 2012-08-06 20:35:33

53

正如@Pickels所说,Partial在3.x中被删除。然而,最近的EJS的版本提供了一个机制,包括“谐音”,所谓的“有”:

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

包括相对于与包括SQL语句的模板,例如,如果你有“ ./views/users.ejs“和”./views/user/show.ejs“,您将使用<%include user/show%>。包含的文件实际上包含在模板中,编译后不执行IO,因此这些包含的模板可以使用局部变量。

以下内容将替代旧的partial()函数。您需要在其他地方进行调整以完全支持Express 3.x,但大多数情况下,这似乎表现良好(实际上更好 - 代码少,性能更好)。

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

需要注意的是,您需要包含文件名:http://stackoverflow.com/a/13537052/131809 – Alex 2012-11-24 12:21:00

+0

另外,ejs站点上的布局部分有一个使用包含https:// github的示例。 com/visionmedia/ejs/blob/master/Readme.md#layouts来支持你想要的东西。 – 2012-12-13 14:52:24

+0

任何想法如何将一个部分包含在父目录中?使用'../ path/partial'完全不起作用... – Vadorequest 2014-08-16 09:49:00