node.js - nodejs Jade 条件扩展

标签 node.js layout conditional express pug

我想让我的 Jade 页面根据条件扩展不同的布局。所以我的代码如下所示:

if myConditionVariable
  extends layout1
else
  extends layout2  
block content
  p here goes my content!

现在这不起作用。无论条件如何,似乎都只会尊重最后定义的扩展。我也试过动态定义模板名,比如

extends myLayoutNameVariable

并以不同的方式设置 myLayoutNameVariable(表达动态辅助函数,将其设置为 var、local var 等...)

对于条件布局还有其他解决方案吗,或者有人可以告诉我我做错了什么吗?

干杯,西蒙

最佳答案

因此,处理此问题的一种稍微不那么侵入性的方法是更改​​布局本身。

我加了一点中间件,剩下的就顺其自然了..

app.use(function(req, res, next){
    res.locals.isAjax = req.headers['x-requested-with'] && 
        req.headers['x-requested-with'] === 'XMLHttpRequest';
    next();
});

既然设置好了,“isAjax”就可以用于jade了。

在我的“layout.jade”(您将从 扩展的模板)中,我这样做:

- if(!isAjax)
  doctype 5
    html
      head
      body
        block content
        block scripts
- else
  block content
  block scripts

为了(希望)清晰起见,我已经删除了完整 layout.jade 的其他元素。

最后,我扩展 layout.jade 的普通 View 无需修改即可工作(此 Jade 模板包括这两种情况)。

extends layout.jade
  .container.
     This is text will be wrapped for a non-ajax request, 
     but not for an ajax request.

关于node.js - nodejs Jade 条件扩展,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11041168/

相关文章:

node.js - 汇总 - 路径解析不正确

javascript - 来自 ReactJs 的 POST 请求

javascript - 与 Promise 一起使用时,异步 waterfall 不执行下一个回调方法

C# 和 ASP.NET MVC : Using #if directive in a view

javascript - Angular:仅在当前单击的按钮上切换事件类(不使用 *ngFor)

javascript - 使用 Jasmine 和 Node.js 设置 html 报告

Android设置按钮宽度为屏幕的一半

html - 如何解决 flexbox 内容太大,页眉和页脚不拉伸(stretch)?

java - 如何将 JButton 添加到 GridLayout?

conditional - 比较 Zsh 中的版本字符串