2014-01-26 58 views
0

我將一個對象school傳入我的編輯窗體中,並希望將其中一個選項設置爲選中狀態。學校有一個屬性focus這樣對JavaScript school.focus = 1,爲Python school.focus = 2,和Ruby on Rails的school.focus = 3Jade內聯條件?

我怎麼會寫有條件的內嵌設置這些選項爲「選擇」呢?

//- Focus 
div(data-role='fieldcontain') 
    fieldset(data-role='controlgroup') 
    label(for='focus') Focus 
     select(name='focus') 
     option(value='JavaScript') JavaScript 
     option(value='Python') Python 
     option(value='Ruby on Rails') Ruby on Rails 

我已經得到了這種類型的內嵌有條件的,當有一個指定(value =)工作:

//- School Name 
    div(data-role='fieldcontain') 
     fieldset(data-role='controlgroup') 
     label(for='school_name') School Name 
      input(id='school_name',type='text', value=(school ? '#{school.school_name}' :  ''),placeholder='School name here',name='school_name') 

回答

2

幸運的是,翡翠是真棒,你不需要使用一個三元組。吻。

div 
    fieldset 
    label Focus 
     select 
     option(value='JavaScript', selected=(school.focus == 1)) JavaScript 
     option(value='Python', selected=(school.focus == 2)) Python 
     option(value='Ruby on Rails', selected=(school.focus == 3)) Ruby on Rails 

所以,如果locals.school.focus2,那麼你最終與此標記:

<div> 
    <fieldset> 
    <label>Focus 
     <select> 
     <option value="JavaScript">JavaScript</option> 
     <option value="Python" selected="selected">Python</option> 
     <option value="Ruby on Rails">Ruby on Rails</option> 
     </select> 
    </label> 
    </fieldset> 
</div> 

演示@http://jsfiddle.net/mattball/Razge/

我建議重構稍微分開從該值和標籤標記,這樣你可以讓Jade爲你迭代它們,但這是一般的想法。


N.B.如果標籤是要標記的元素的父項,則可以完全省略標籤的for屬性。​​3210

如果對屬性沒有指定,但標籤元素有一個貼標籤的元素後裔,然後在樹順序的第一個此類後代是標籤元素的標記控制。

......所有這些都說:在你的情況下,該標籤的for屬性是多餘的,你可以擺脫它。

+0

完美地工作,並感謝您的快速響應!您能否提供一個示例,說明您將標記中的值和標籤分開時的含義? – collenjones

+0

將它們放入一個數組中,例如'[{label:'JavaScript',value:'JavaScript'},{label:'Python',value:'Python'},{...}]'並迭代該數組生成'

+2

-1我只會因爲你說「JADE很棒」而低估它。事實並非如此。文檔很糟糕,基於縮進的編程幾乎和大寫鎖定鍵一樣糟糕,而解析器經常會出錯,同時完全不知道哪一行模板是問題。 – user949300