2011-09-27 5 views
33

Bir dizideki ilk öğeden her şeyi ayrı bir şekilde CSS sınıfının Jade templating motorunu kullanarak yapmaya çalışıyorum.Jade Inline Koşullu

Bunu böyle yapabileceğimi umuyordum, ama şans yok. Baska öneri?

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

ben olarak aşağıdaki kodu sarabilirdiniz biliyorum ama bildiğim kadarıyla işe Jade'in yuvalama kurallarını anlamak gibi, kodu çoğaltmak veya mixin veya bir şeye ayıklamak gerekir.

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

Bunu yapmanın daha iyi bir yolu var mı?

+1

btw- neden her bir "if" için aynı özdeş yazıyı tekrar yazıyorsunuz? – vsync

cevap

44

Bunun yerine bunu yapabilirsiniz: Bu da çalışır

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

Sen bir dahisin. Bunu nasıl düşünmedim. –

+0

Endişelenme, kafamı bu aynı problemin içine birkaç kez çarptı. :) – ctide

+0

+1. Çok basit, neden bunu yapmayı düşünmediğimi bilmiyorum. – Menztrual

20

:

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

+1, İyi çalışıyor. –

2

Bu benim çözümdür. Geçerli aktif yolu geçmek için bir mixin kullanıyorum ve mixin içinde tüm menüyü tanımladım ve yolun aktif yol olup olmadığını kontrol etmek için her zaman bir if geçiyorum.

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

Bu aynı zamanda çalışır:

div(class=(i===0 ? 'span13' : 'span13 offset3')) 
değil Kullanılacak edebilirsiniz
1

, sadece class ama şartlı bir şekilde niteliklerin bir demet:

- 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

Ben basit işlevleri kullanmayı tercih Herhangi karmaşık koşulları kontrol etmek için. Mükemmel ve hızlı çalışıyor, şablonda uzun çizgiler yazmamalısınız. o yardımcı olur ve fikri anlamak açıktır Umut bu

-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 

bu

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

yerini alabilir.

Ayrıca dosya eklemek tüm işlevleri taşımak ve farklı şablonlar arasında paylaşmak iyi bir uygulama, ama başka bir soru

Bu sözdizimi kullanabilirsiniz boksör 2 ile