nodejs jade条件扩展

cmo*_*qpr 10 layout conditional node.js express pug

我想让我的Jade页面扩展不同的布局,具体取决于条件.所以我的代码看起来像这样:

if myConditionVariable
  extends layout1
else
  extends layout2  
block content
  p here goes my content!
Run Code Online (Sandbox Code Playgroud)

现在这不起作用.无论条件如何,似乎只会考虑最后定义的延伸.我也尝试动态定义templatename,例如

extends myLayoutNameVariable
Run Code Online (Sandbox Code Playgroud)

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

是否有任何其他条件布局的解决方案或有人可以告诉我我做错了什么?

干杯,西蒙

And*_*ken 11

因此,处理此问题的一种稍微不那么干扰的方法是更改​​布局本身.

我添加了一些中间件,其余的流程..

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

现在已经设置好了,"isAjax"可用于jade.

在我的"layout.jade"(模板您将扩展),我这样做:

- if(!isAjax)
  doctype 5
    html
      head
      body
        block content
        block scripts
- else
  block content
  block scripts
Run Code Online (Sandbox Code Playgroud)

我已经删除了完整layout.jade的其他元素(希望)清晰度.

最后,我的普通视图扩展了layout.jade而无需修改(这个jade模板包含两种情况).

extends layout.jade
  .container.
     This is text will be wrapped for a non-ajax request, 
     but not for an ajax request.
Run Code Online (Sandbox Code Playgroud)


Pic*_*els 7

这似乎是一个仍然在github上开放的问题.


atc*_*atc 5

我希望现在还不晚,但我遇到了这个问题,我想我找到了一个解决方法:

  1. 制作一个layout.jade,条件包括两个布局:

    layout.jade:
    
    if conditionalVariable
        include firstLayout.jade
    else
        include otherLayout
    
    Run Code Online (Sandbox Code Playgroud)
  2. 在您的视图中,在控制器(/ )中扩展layout.jade和定义:conditionalVariabletruefalse

    view.jade:
    
    extends layout
    
    block content
        p here goes my content!
    
    Run Code Online (Sandbox Code Playgroud)
  3. 迪斯科!