5

我正在使用 Node.js 和 express。假设我有一对玉文件:

模板.jade

html
  body
    block page-content

例子.jade

extends template
    block page-content
        p
           |  Lorem ipsum yadda yadda

如果我渲染 example.jade,我会得到将该段落标记插入到 template.jade 的正文标记的结果,这通常是我想要的。

我的问题是我正在尝试使用 pushState 和 History API 来加载这些文件(好吧,显然不是这些文件),并且在这样做时,我想要一个只返回 page-content 块内容的请求本身,没有完整的 html 文档的其余部分。有没有一种简单的方法来告诉 Jade 只渲染块本身而不是将其嵌入到模板中?


我能想到的最好的办法就是把它改成:

例子.jade

extends template
  block page-content
    import example-content

示例内容.jade

p
  | Lorem ipsum yadda yadda

但是像这样创建额外的文件似乎很糟糕。

4

1 回答 1

0

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);
于 2013-08-05T20:32:08.347 回答