2012-08-11 15 views
16

In manubri, c'è un operatore ternario? Non intendo if else; Voglio dire come a == true ? "a" : "b".Esiste un operatore ternario in handlebars.js?

+2

manubrio è solo JavaScript, quindi l'operatore ternario funziona proprio come in JavaScript. – m90

+0

Hai controllato il sito web ufficiale: http://handlebarsjs.com/? Contiene tutorial ... –

+0

Ho controllato il sito web ufficiale. Ma non ho visto le spiegazioni del ternary oprerator. – shawnXiao

risposta

8

È possibile creare il proprio helper in handlbar se lo si desidera. Qualcosa come ternary(a==true, "a", "b"). Per ulteriori informazioni su questo vedi lo documentation. L'idea di m90 non è l'idea dietro il manubrio. L'idea è di non avere codice esplicito nei tuoi modelli, solo chiamate ad aiutanti e oggetti.

+0

come http://stackoverflow.com/q/29441130/770127 – ryanve

9

L'helper if può essere utilizzato come operatore ternario passando tre argomenti.

Nell'esempio seguente, un pulsante ha un valore predefinito di "Save Changes", ma quando model.isSaving è true, il valore viene temporaneamente modificato in Saving....

<button>{{if model.isSaving "Saving..." "Save Changes"}}</button> 

... In alternativa, utilizzate all'interno di un altro aiutante:

{{input type="submit" value=(if model.isSaving "Saving..." "Save Changes")}} 
+1

Potresti elaborare o indicare un esempio? – majman

+2

@majman Ho aggiunto un esempio di codice per dimostrare quale ritengo sia la risposta migliore. – Andrew

1

ho un aiutante per questo (attenzione che altri soccorritori possono essere utilizzati anche all'interno) https://gist.github.com/terion-name/d87ed8907f1bb2e25f32

// app/helpers/iftrue.js 
import Ember from 'ember'; 

export function iftrue(params) { 
    if (params[0]) { 
    return params.length === 2 ? params[0] : params[1]; 
    } 
    if (params.length === 2) { 
    return params[1]; 
    } else if (params.length === 3) { 
    return params[2]; 
    } 
    return null; 
} 

export default Ember.Helper.helper(iftrue); 

Con due parametri: se il primo parametro viene valutato su true, verrà stampato, altrimenti secondo

{{iftrue project.price 'N/A'}} // $9.99 
{{iftrue project.priceNotAvailable 'N/A'}} // N/A 

Con tre parametri: se il primo parametro restituisce true secondo sarà stampato, tuttavia terzo

// If deadline is set formatted date will be printed, otherwise 'N/A' 
{{iftrue project.deadline (moment-format project.deadline 'DD.MM.YYYY') 'N/A'}} 
+0

Sebbene questo collegamento possa rispondere alla domanda, è meglio includere qui le parti essenziali della risposta e fornire il link per riferimento. Le risposte di solo collegamento possono diventare non valide se la pagina collegata cambia. - [Dalla recensione] (/ recensione/post di bassa qualità/10731433) –

+1

@progressive_overload modificato, grazie – Terion

0

Questo sotto codice può essere utilizzato per ternaria o qualsiasi tipo di espressione eval.

Avvertenza: utilizzare questo codice in uno scenario in cui Eval può essere utilizzato in modo sicuro.

{{#if (myfunc "(a[0] + 1) % 2 === 0" arg1)}} 

{{/if}} 

{{#if (myfunc "(a[0] + a[1]) % 2 === 0" arg1 arg2)}} 

{{/if}} 

manubrio helper funzione

myfunc: (exp, ...a) => { 
    return eval(exp); 
    }