Ответ 1
Кажется, это проблема, которая все еще открывается на github.
Я хотел бы, чтобы моя страница Jade расширяла различные макеты, в зависимости от состояния. Поэтому мой код выглядит так:
if myConditionVariable
extends layout1
else
extends layout2
block content
p here goes my content!
Теперь это не работает. Кажется, будут соблюдаться только последние определенные расширения, независимо от условий. Я также попытался динамически определить templatename, например
extends myLayoutNameVariable
и установите myLayoutNameVariable разными способами (выражайте динамическую вспомогательную функцию, задайте ее как var, local var и т.д.)
Есть ли другое решение для условных макетов, или кто-нибудь может сказать мне, что я делаю неправильно?
Cheers, simon
Кажется, это проблема, которая все еще открывается на github.
Итак, немного менее навязчивый способ справиться с этим - это изменить сам макет.
Я добавил немного промежуточного программного обеспечения, а остальные потоки.
app.use(function(req, res, next){
res.locals.isAjax = req.headers['x-requested-with'] &&
req.headers['x-requested-with'] === 'XMLHttpRequest';
next();
});
Теперь, когда это установлено, "isAjax" доступен для нефрита.
В моем "layout.jade" (шаблон, из которого вы простираетесь), я делаю это:
- if(!isAjax)
doctype 5
html
head
body
block content
block scripts
- else
block content
block scripts
Я удалил другие элементы полного layout.jade для (надеюсь) ясности.
Наконец, мои обычные представления, которые расширяют layout.jade без изменений (этот нефритовый шаблон включает оба случая).
extends layout.jade
.container.
This is text will be wrapped for a non-ajax request,
but not for an ajax request.
Я надеюсь, что это не слишком поздно, но я столкнулся с этой проблемой, и я думаю, что я нашел способ обхода:
Сделайте layout.jade, что conditionaly включает в себя оба макета:
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!
Можете ли вы сделать что-то вроде:
if myConditionVariable
p test
?
Если нет, вы передаете myConditionVariable
правильно, когда говорите, чтобы сделать это представление? Короткий пример:
app.get "/", (req, res) ->
res.render "index",
myConditionVariable: true