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)
我希望现在还不晚,但我遇到了这个问题,我想我找到了一个解决方法:
制作一个layout.jade,条件包括两个布局:
layout.jade:
if conditionalVariable
include firstLayout.jade
else
include otherLayout
Run Code Online (Sandbox Code Playgroud)在您的视图中,在控制器(/ )中扩展layout.jade
和定义:conditionalVariable
true
false
view.jade:
extends layout
block content
p here goes my content!
Run Code Online (Sandbox Code Playgroud)迪斯科!
归档时间: |
|
查看次数: |
5132 次 |
最近记录: |