2011-05-17 11 views
209

Bunu bıyıkta nasıl yapacağımı anlayamıyorum garip görünüyor. o destekleniyor mu?Mustache.js içinde bir if/else nasıl başarabilirim?

{{#author}} 
     {{#avatar}} 
     <img src="{{avatar}}"/> 
     {{/avatar}} 
     {{#!avatar}} 
     <img src="/images/default_avatar.png" height="75" width="75" /> 
     {{/avatar}} 
    {{/author}} 

Bu tabii ki doğru değil, ama dokümantasyon böyle bir şey söz etmez:

Bu çalışıyorum benim üzücü bir girişimdir. "Başka" kelimesi bile belirtilmemiştir: (

Ayrıca, neden bu şekilde tasarlanmış bıyık? Bu tür bir şey kötü olarak değerlendiriliyor mu? Modelin varsayılan değerini ayarlamak için beni zorlamaya mı çalışıyor? Bu mümkün olmadığı durumlarda ne olacak?

+1

: docs ters bölümler için

{{#author}} {{#avatar}} <img src="{{avatar}}"/> {{/avatar}} {{^avatar}} <img src="/images/default_avatar.png" height="75" width="75" /> {{/avatar}} {{/author}} 

Look:

{{#repo}} <b>{{name}}</b> {{/repo}} {{^repo}} No repos :( {{/repo}} 

Senin durumunda

"Neden bıyık bu şekilde tasarlandı?" Çok emin değilim, ama fikrin şudur ki templasyonlu bir dil şu olmalıdır: şablonlar yazmak için bir dil, yani ürettikleri çıktıya benzeyen şeyler, sadece değişken bitlerin gittiği delikler. Şablon diline mantık eklemek, şablonları daha karmaşık hale getirir ve mantık bitlerini işlemek için zaten bir programlama diliniz olduğunda, neden rahatsız olur? –

+4

@ PaulD.Waite "Mantıksız", "keyfi olmayan kod" anlamındadır. Bir şablonda görünmeyen mantığı yerleştirmek için olduğu gibi gerçek görüntü mantığını koda koymak çok kötü. Bıyık bunu başarmak için asgari bir mantık sağlamaya çalışır. – jpmc26

+0

@ jpmc26: çok doğru. –

cevap

407
+53

gerekir. Bıyık doktorlar çok komik. "Biz buna" mantıksız "diyoruz, çünkü eğer ifadeler, başka maddeler veya döngüler olsun." Yeeeeaaaaaa .... – boxed

+3

@boxed, teknik olarak haklısınız, ters çevrilmiş bölüm, etiket değerini kontrol ettiği için mantıklı bir ifadedir. Ama bence buradaki nüans, her iki tablonun da tek bir/else yerine açık bir şekilde değerlendirilmesi gerekiyor. Temel olarak, bıyık yapısını zorlarsa eğer (koşul) {// birşeyler yapsın} 've ardından bir' if (! Koşulu) {// başka bir şey yapın}. Ayrıca, mantık tabanlı bir dile kıyasla, mantıkta gerçekleştirilebilecek mantık miktarı çok azaldı. Varlık veya yokluk tek kontrollerdir, yani bir etiketin değerinin 5'e eşit olup olmadığını kontrol edemez ve ardından bu etiketin koduna giremezsiniz. – MandM

+12

@MandM yea ... bu yüzden mantığı var ama sadece işe yarar bir şey yapamıyor: P – boxed

50

Bu logicless çiftleşmiş noktasıdır "denetleyicisi", içinde çözmek şeydir.

// some function that retreived data through ajax 
function(view){ 

    if (!view.avatar) { 
     // DEFAULTS can be a global settings object you define elsewhere 
     // so that you don't have to maintain these values all over the place 
     // in your code. 
     view.avatar = DEFAULTS.AVATAR; 
    } 

    // do template stuff here 

} 

Bu aslında görüntü url en koruyarak sonra çok daha iyi olduğunu veya şablonlarınızda değişebilen veya değişmeyen diğer ortamlar, ancak alışmak biraz zaman alır. Asıl nokta, şablon tüneli vizyonunun, bir avatarın öğrenilmesidir. img url, diğer şablonlarda kullanılmak üzere bağlanmıştır, bu URL'yi X şablonları veya tek bir DEFAULTS ayarları nesnesinde tutacak mısınız?

// augment view 
view.hasAvatar = !!view.avatar; 
view.noAvatar = !view.avatar; 

Ve şablonda:

{{#hasAvatar}} 
    SHOW AVATAR 
{{/hasAvatar}} 
{{#noAvatar}} 
    SHOW DEFAULT 
{{/noAvatar}} 

Ama bu logicless çiftleşmiş bütün anlam karşı oluyor;)

Diğer bir seçenek aşağıdaki yapmaktır.

+0

Teşekkürler. Bu harika bir cevap! Aslında javascript kodunun yapısında "şeyler ne zaman yapılacağı" ile ilgili diğer yapısal yönler konusunda bana yardımcı oldu. Bu yanıtta – egervari

+0

{{/ hashavatar}} ve {{/ no novavatar}} {{/ hasAvatar}} ve {{/ noAvatar}} olmalıdır. – Mulhoon

14

Sizin başka deyimi ^ not (bu gibi görünmelidir), yani size mantıklı şablon oluşturmayı istiyor ve Bıyık kullanmamalısınız, yapmak istediğim buysa olsa kendinizi o bu kavramı öğrenme adil bir şans veriyorsunuz): Bıyıkta buna 'Ters bölümler' denir. Eğer (mükemmel desteklenir) Bıyık içinde if/else nasıl

+6

, hem # hem de^'ye ihtiyacınız olmadığını, sadece' değil 'için'^durumda olduğunu unutmayın. – zappan

+0

Bu, en son sürümde çalışmaz. Zappan haklı, sadece^ – simonmorley