2011-09-27 32 views
33

我試圖讓所有的東西都從數組中的第一個元素開始,使用Jade模板引擎創建CSS類。Jade Inline有條件的

我希望我能做到這一點,但沒有運氣。有什麼建議麼?

- each sense, i in entry.senses 
    div(class="span13 #{ if (i != 0) 'offset3' }") 
    ... a tonne of subsequent stuff 

我知道我可以換爲下面的代碼,但據我瞭解玉的嵌套規則的工作,我不得不重複的代碼或將其解壓到一個mixin什麼的。

- each sense, i in entry.senses 
    - if (i == 0) 
    .span13 
     ... a tonne of subsequent stuff 
    - else 
    .span13.offset3 
     ... identical subsequent stuff 

有沒有更好的方法來做到這一點?

+1

btw-你爲什麼要爲每個'if'再次寫相同的東西? – vsync

回答

44

你可以這樣做,而不是:

- each sense, i in entry.senses 
    - var klass = (i === 0 ? 'span13' : 'span13 offset3') 
    div(class=klass) 
    ... a tonne of subsequent stuff 
+0

你是個天才。我怎麼沒有想到這一點。 –

+0

別擔心,在我意識到自己可以擺脫這種困境之前,我幾次抨擊了我的頭並解決了同樣的問題。 :) – ctide

+0

+1。這麼簡單,我不知道爲什麼我沒有想到要這樣做。 – Menztrual

20

這工作太:

div(class="#{i===0 ? 'span13' : 'span13 offset3'}") 
+0

+1,工作正常。 –

2

這是我的解決方案。我正在使用mixin來傳遞當前活動路徑,而在mixin中,我定義了完整的菜單並始終傳遞一個if來檢查路徑是否爲活動路徑。

mixin adminmenu(active) 
    ul.nav.nav-list.well 
    li.nav-header Hello 
    li(class="#{active=='/admin' ? 'active' : ''}") 
     a(href="/admin") Admin 
24

這也適用於:

div(class=(i===0 ? 'span13' : 'span13 offset3')) 
1

您可以使用,不僅class,但在有條件的方式一堆屬性:

- each sense, i in entry.senses 
    - var attrs = i === 0 ? {'disabled': 'true'} : {'class': '100', 'ng-model': 'vm.model.name', 'ng-click': 'vm.click()'} 
    div&attributes(attrs) 
0

我更喜歡用簡單的功能檢查任何複雜的條件。 這是完美和快速的作品,你不應該寫在模板中的長行。 可以更換該

- each sense, i in entry.senses 
    - var klass = (i === 0 ? 'span13' : 'span13 offset3') 
    div(class=klass) 
    ... a tonne of subsequent stuff 

這個

-function resultClass(condition) 
-if (condition===0) 
    -return 'span13' 
-else if (condition===1) 
    -return 'span13 offset3' 
-else if (condition===2) //-any other cases can be implemented 
    -return 'span13 offset3' 
-else 
    -return 'span13 offset3' 

- each sense, i in entry.senses 
    div(class=resultClass(i)) 
    ... a tonne of subsequent stuff 

希望它可以幫助和思路是清晰的瞭解。

而且它的移動在包括文件中的所有功能和不同的模板之間共享是個好習慣,但它的另一個問題