jade: if statements and nesting

前端 未结 3 1612
孤街浪徒
孤街浪徒 2021-02-07 07:41

Concider this pseudo-ish server side code

if(isFixed) {
  
} else {
}

Inner element

相关标签:
3条回答
  • 2021-02-07 08:08

    Jade doesn't seem to have a built in solution to start and end the tags other than utilizing the 'pipe' character to render plain text.

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

    Less cluttered solution -

    div(class=(isFixed) ? 'fixed' : '')
      p inner element
    
    0 讨论(0)
  • 2021-02-07 08:12

    You need to separate control flow from the template. Try this:

    divClass = null
    
    if isFixed
       divClass = "fixed"
    
    div(class=divClass)
       p inner element
    

    Which in turn might suggest factoring out the "isFixed" parameter into the actual divClass parameter to be passed on. But that depends on your remaining code/template of course.


    As an alternative, try a mixin:

    mixin content
      p inner element
    
    if (isFixed)
      div(class="test")
        mixin content
    else
      div(class="other")
        mixin content
    
    0 讨论(0)
  • 2021-02-07 08:12

    I would approach this with a ternary (or fully written out conditional or method) to determine the class attribute. That allows you to keep the div on one line and keeps indentation like it would be for any other element:

    div(class="#{ isFixed ? 'fixed' : '' }")
        p Inner Element
    
    0 讨论(0)
提交回复
热议问题