Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/38.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 用玉渲染单个块_Javascript_Node.js_Templates_Express_Pug - Fatal编程技术网

Javascript 用玉渲染单个块

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

我正在使用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,我将得到将该段落标记插入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块似乎很痛苦。