我正在使用Node.js并表达。假设我有一对玉文件:
template.jade
html
body
block page-content
example.jade
extends template
block page-content
p
| Lorem ipsum yadda yadda
如果我渲染example.jade,我会得到将该段落标记插入template.jade的body标签的结果,这通常是我想要的。
我的问题是我正在尝试使用pushState和History API来加载这些文件(好吧,显然不是这些文件),当这样做时,我想要一个只返回页面内容的请求 - 内容块本身,没有完整的html文档的其余部分。有没有一种简单的方法可以告诉Jade只是渲染块本身而不是将其嵌入到模板中?
我能想到的最好的就是改变它:
example.jade
extends template
block page-content
import example-content
例如-content.jade
p
| Lorem ipsum yadda yadda
但是创建像这样的额外文件似乎很苛刻。
答案 0 :(得分:0)
Jade支持可执行代码。使用前缀时 - (不缓冲)。例如,您可以在主布局jade模板中使用 if statment :
- if (renderType && renderType == 'page') {
doctype 5
html
head
title= title
body
- }
block content
渲染html页面如:
res.render('index', { title: 'StackOverflow', renderType: 'page' });
渲染html块,如:
res.render('index', { title: 'StackOverflow', renderType: 'block' });
如果您不喜欢在所有渲染表达式中使用 renderType 变量,请使用
res.locals(obj) //*Assign several locals with the given obj. The following are equivalent:*
并为所有请求设置默认值。 你在哪里初始化app添加处理程序:
var logger = function(req, res, next)
{
res.locals({renderType:'page'});
next();
};
app.use(logger);