nodejs jade条件扩展

时间:2012-06-14 20:52:30

标签: node.js layout conditional express pug

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

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

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

extends myLayoutNameVariable

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

是否有其他条件布局解决方案,或者有人能告诉我我做错了什么?

干杯,西蒙

4 个答案:

答案 0 :(得分:11)

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

我添加了一些中间件,剩下的就是..

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而无需修改(这个jade模板包含两种情况)。

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

答案 1 :(得分:7)

这似乎是github上仍然存在的问题。

答案 2 :(得分:5)

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

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

    layout.jade:
    
    if conditionalVariable
        include firstLayout.jade
    else
        include otherLayout
    
  2. 在您的视图中,展开layout.jade,并在控制器中定义conditionalVariabletrue / false):

    view.jade:
    
    extends layout
    
    block content
        p here goes my content!
    
  3. Disco <!/ p>

答案 3 :(得分:0)

你能做点什么:

if myConditionVariable
  p test

如果没有,当你告诉渲染该视图时,你是否正确传递myConditionVariable?一个简短的例子:

app.get "/", (req, res) ->
  res.render "index",
    myConditionVariable: true