Javascript 用玉渲染单个块
我正在使用Node.js和express。假设我有一对翡翠档案: 翡翠Javascript 用玉渲染单个块,javascript,node.js,templates,express,pug,Javascript,Node.js,Templates,Express,Pug,我正在使用Node.js和express。假设我有一对翡翠档案: 翡翠 html body block page-content 例如,杰德 extends template block page-content p | Lorem ipsum yadda yadda extends template block page-content import example-content 如果我呈现example.jade
html
body
block page-content
例如,杰德
extends template
block page-content
p
| Lorem ipsum yadda yadda
extends template
block page-content
import example-content
如果我呈现example.jade,我将得到将该段落标记插入template.jade的body标记的结果,这通常是我想要的
我的问题是,我试图使用pushState和History API来加载这些文件(很可能不是这些文件),在这样做时,我希望请求只返回页面内容块本身的内容,而不返回完整html文档的其余部分。有没有一种简单的方法告诉Jade只渲染块本身,而不将其嵌入模板
我能想到的最好的办法就是把它改成: 例如,杰德
extends template
block page-content
p
| Lorem ipsum yadda yadda
extends template
block page-content
import example-content
示例-content.jade
p
| Lorem ipsum yadda yadda
但像这样创建额外的文件似乎有点不太妥当 Jade支持可执行代码。使用时,前缀为-(无缓冲)。例如,您可以在主布局模板中使用if语句:
- 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:*
并为所有请求设置默认值。
初始化应用程序添加处理程序的位置:
var logger = function(req, res, next)
{
res.locals({renderType:'page'});
next();
};
app.use(logger);
我不认为有任何方法可以有条件地包含“extenstemplate”行;在模板文件中放置两个巨大的if块似乎很痛苦。