Node.js 关于partials的新手问题
我有一个简单的标题,菜单,内容和页脚页面。我需要把它们分成不同的文件。在阅读了express文档之后,我(创建了4个模板)写了如下内容:Node.js 关于partials的新手问题,node.js,express,ejs,Node.js,Express,Ejs,我有一个简单的标题,菜单,内容和页脚页面。我需要把它们分成不同的文件。在阅读了express文档之后,我(创建了4个模板)写了如下内容: app.get('/', function(req, res) { var response = [null, null, null, null] , everyNotNull = function(elem) { return (elem !== null); }, sendResponse = function(ty
app.get('/', function(req, res) {
var response = [null, null, null, null]
, everyNotNull = function(elem) {
return (elem !== null);
}, sendResponse = function(type, str) {
switch (type) {
case 'head' : response[0] = str; break;
case 'menu' : response[1] = str; break;
case 'content' : response[2] = str; break;
case 'footer' : response[3] = str; break;
}
if (response.every(everyNotNull)) {
res.send(response.join(''));
}
};
res.partial('head', {'title' : 'page title'}, function(err, str) {
sendResponse('head', str);
});
res.partial('menu', {'active' : '/'}, function(err, str) {
sendResponse('menu', str);
});
res.partial('index', {'title' : 'Home'}, function(err, str) {
sendResponse('content', str);
});
res.partial('footer', {'nowdate' : (new Date()).getFullYear()}, function(err, str) {
sendResponse('footer', str);
});
});
虽然有效,但我觉得有点脏。是否有更好的方法使用部分模板?您怀疑缺少某些内容是对的,您在那里做了不必要的工作 Express将为您缝合模板,只需调用res.render()和要调用的视图的名称。布局和分区应自动拉入 在我的应用程序中,我通常使用如下部分。只要用您正在使用的模板引擎(Jade、moustach等)替换对EJS的引用即可: /lib/app.js
app.get('/', function(req, res) {
var model = {
layout:'customLayout', // defaults to layout.(ejs|jade|whatever)
locals:{
foo:'bar'
}
};
res.render('index',model);
});
<html>
<head><%- partial('partials/head') %></head>
<body>
<%- partial('partials/menu') %>
<%- body %>
<%- partial('partials/footer') %>
</body>
</html>
<h1>Index page</h1>
<div><a href='... </div>
<script>...</script>
etc.
/views/layout.ejs
app.get('/', function(req, res) {
var model = {
layout:'customLayout', // defaults to layout.(ejs|jade|whatever)
locals:{
foo:'bar'
}
};
res.render('index',model);
});
<html>
<head><%- partial('partials/head') %></head>
<body>
<%- partial('partials/menu') %>
<%- body %>
<%- partial('partials/footer') %>
</body>
</html>
<h1>Index page</h1>
<div><a href='... </div>
<script>...</script>
etc.
/views/index.ejs
app.get('/', function(req, res) {
var model = {
layout:'customLayout', // defaults to layout.(ejs|jade|whatever)
locals:{
foo:'bar'
}
};
res.render('index',model);
});
<html>
<head><%- partial('partials/head') %></head>
<body>
<%- partial('partials/menu') %>
<%- body %>
<%- partial('partials/footer') %>
</body>
</html>
<h1>Index page</h1>
<div><a href='... </div>
<script>...</script>
etc.
索引页
/views/partials/menu.ejs
app.get('/', function(req, res) {
var model = {
layout:'customLayout', // defaults to layout.(ejs|jade|whatever)
locals:{
foo:'bar'
}
};
res.render('index',model);
});
<html>
<head><%- partial('partials/head') %></head>
<body>
<%- partial('partials/menu') %>
<%- body %>
<%- partial('partials/footer') %>
</body>
</html>
<h1>Index page</h1>
<div><a href='... </div>
<script>...</script>
etc.
啊哈,有些问题。部分功能是否以同步方式执行?可以从任何部分模板访问“foo”变量吗?如何将变量传递给局部视图(只能使用集合或多个变量)?我认为同步性的级别取决于模板引擎。Express在生产环境中使用模板缓存,因此无论怎样性能都非常好。您可以使用与res.render()相同的方式将变量传递到分部中,即分部('name',{locals:{foo:'bar'})顺便问一下,分部是否返回“text/plain”数据?有没有办法改变这种行为?不知道你在问什么。Partial返回分部模板输出的任何文本(这就是为什么您需要未scaped代码块来正确呈现分部)。你想完成什么?似乎这是另一个错误: