2014-12-16 14 views
25

Guardando questa guida Using Blaze, sembra che Blaze supporti le dichiarazioni {{#if}} e {{else}}, ma non ho visto esempi di un'istruzione if-else. Questo è supportato in Blaze? O devo fare un blocco aggiuntivo se all'interno del blocco else, che può diventare brutto.Meteor + Blaze - If else

Ho provato {{else if}}, ma questo ha dato un errore.

{{#if en}}{{text.en}}{{else if tc}}{{text.tc}}{{/if}} 

risposta

50

Spacebars utilizza la stessa struttura del flusso di controllo come handlebars quindi la risposta è la stessa come this one. Nel tuo caso:

{{#if en}} 
    {{text.en}} 
{{else}} 
    {{#if tc}} 
    {{text.tc}} 
    {{/if}} 
{{/if}} 

Nota a margine - una delle cose belle di jade è che supporta else if.


volte un'alternativa migliore è quello di spostare la logica in un aiuto del genere:

Template.myTemplate.helpers({ 
    textValue: function() { 
    if (this.en) { 
     return this.text.tc; 
    } else if (this.tc) { 
     return this.text.tc; 
    } 
    } 
}); 
<template name="myTemplate"> 
    <p>{{textValue}}</p> 
</template> 
+0

Grazie per la risposta. Ma cosa succede se ho molte molte dichiarazioni "else if"? Facendolo in questo modo sarà brutto. Non ci sono alternative? – dayuloli

+0

Usando solo i modelli, non ci sono alternative. Ti consigliamo di aggiungere un helper di template per restituire il valore che ti serve. –

+0

Non so come farlo al momento. Leggerò su di esso. Grazie per la tua risposta e chiarimento! Ho esaurito tutti i miei voti per oggi. +1 domani! – dayuloli

4

A seguito di risposta eccellente del @ Davide Wheldon, è anche la pena notare che è possibile passare i parametri alle funzioni di supporto JavaScript dal modello Blaze.

Così, per esempio il codice qui sotto rende selettivamente le opzioni per un elenco di selezione chiamando il metodo di supporto con la linea isSelected region customerCompany:

{{#if isSelected region customerCompany}} 
     <option value={{region._id}} selected>{{region.name}}</option> 
    {{else}} 
     <option value={{region._id}}>{{region.name}}</option> 
    {{/if}} 

e poi nel file js:

isSelected: function (region, customer) { 

    return customer.salesRegionId === region._id; 
}, 

Questo approccio di passare le variabili ai tuoi aiutanti è generalmente consigliato per evitare la confusione che può sorgere con il mutevole significato della parola chiave this quando si usano i modelli.

1

La versione corrente di Blaze supporta altro se - vedi sotto per un formato di esempio e un riferimento alla risoluzione del problema github.

{{#if isUserProfile}} 
    <h3>User Profile</h3> 
{{else if isLawyerProfile}} 
    <h3>Lawyer Profile</h3> 
{{else}} 
    <h3>Test</h3> 
{{/if}} 

Riferimento Link: GitHub Else If Issue Resoltion