我想让我的Jade页面扩展不同的布局,具体取决于条件。所以我的代码看起来像这样:
if myConditionVariable
extends layout1
else
extends layout2
block content
p here goes my content!
现在这不起作用。无论条件如何,似乎只会考虑最后定义的延伸。我也尝试动态定义templatename,例如
extends myLayoutNameVariable
并以不同的方式设置myLayoutNameVariable(表达动态辅助函数,将其设置为var,local var等...)
是否有其他条件布局解决方案,或者有人能告诉我我做错了什么?
干杯,西蒙
答案 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)
我希望现在还不晚,但我遇到了这个问题,我想我找到了一个解决方法:
制作一个layout.jade,条件包括两个布局:
layout.jade:
if conditionalVariable
include firstLayout.jade
else
include otherLayout
在您的视图中,展开layout.jade
,并在控制器中定义conditionalVariable
(true
/ false
):
view.jade:
extends layout
block content
p here goes my content!
Disco <!/ p>
答案 3 :(得分:0)
你能做点什么:
if myConditionVariable
p test
如果没有,当你告诉渲染该视图时,你是否正确传递myConditionVariable
?一个简短的例子:
app.get "/", (req, res) ->
res.render "index",
myConditionVariable: true