Jade: если утверждения и вложенность

Указать этот псевдоничный серверный код

if(isFixed) {
  <div class="fixed">
} else {
  <div>
}
    <p>Inner element</p>
  </div>

Я пытаюсь сделать это в нефритовом, но...

 - if(mode === 'fixed') {
   div#tabbar
 - }
     p ...I cannot get this to be an inner element :(

Он всегда делает это следующим образом: </div> закрыто:

<div id="tabbar"></div><p>I want this inside of the div</p>

Я испортил отступ? Спасибо!

Ответы

Ответ 1

Вам нужно отделить поток управления от шаблона. Попробуйте следующее:

divClass = null

if isFixed
   divClass = "fixed"

div(class=divClass)
   p inner element

Что, в свою очередь, может предложить разложить параметр isFixed в фактический параметр divClass для передачи. Но это зависит от вашего оставшегося кода/шаблона, конечно.


В качестве альтернативы попробуйте mixin:

mixin content
  p inner element

if (isFixed)
  div(class="test")
    mixin content
else
  div(class="other")
    mixin content

Ответ 2

Я бы подошел к этому с тройным (или полностью выписанным условным или методом), чтобы определить атрибут класса. Это позволяет держать div в одной строке и сохранять отступы, как это было бы для любого другого элемента:

div(class="#{ isFixed ? 'fixed' : '' }")
    p Inner Element

Ответ 3

Jade, похоже, не имеет встроенного решения для запуска и завершения тегов, кроме использования символа "pipe" для рендеринга обычного текста.

- if(mode === 'fixed') {
| <div id="tabbar">
- }
| <p>I cannot get this to be an inner element :(</p>
- if(mode === 'fixed') {
| </div>
- }

Меньше загроможденное решение -

div(class=(isFixed) ? 'fixed' : '')
  p inner element