2014-01-26 61 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