2012-08-11 7 views
16

W kierownicy, czy istnieje operator trójskładnikowy? Nie mam na myśli if else; Mam na myśli a == true ? "a" : "b".Czy w pliku handlebars.js jest operator trójskładnikowy?

+2

Kierownice tylko JavaScript, więc operator trójargumentowy będzie działać tak samo jak w JavaScript. – m90

+0

Czy sprawdziłeś oficjalną stronę internetową: http://handlebarsjs.com/? Zawiera tutoriale ... –

+0

Sprawdziłem oficjalną stronę internetową. Nie widziałem jednak wyjaśnień trójstronnego opreratora. – shawnXiao

Odpowiedz

8

Możesz zbudować własnego pomocnika na paczkach, jeśli naprawdę chcesz. Coś jak ternary(a==true, "a", "b"). Aby uzyskać więcej informacji na ten temat, patrz documentation. Pomysł z m90 nie jest ideą kierownicy. Chodzi o to, aby nie mieć jawnego kodu w szablonach, a jedynie wywoływać pomocników i obiekty.

+0

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

9

Pomocnik if może być używany jako operator trójskładnikowy, przekazując mu trzy argumenty.

W poniższym przykładzie przycisk ma domyślną wartość "Save Changes", ale gdy model.isSaving ma wartość true, wartość tymczasowo zmienia się na Saving....

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

... alternatywnie wykorzystane w innym pomocnika:

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

Czy mógłbyś rozwinąć lub wskazać przykład? – majman

+2

@majman Dodałem próbkę kodu, aby pokazać, co uważam za najlepszą odpowiedź. – Andrew

1

mam pomocnika dla tego (należy zwrócić uwagę, że inni pomocnicy mogą być również używane w środku) 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); 

Z dwoma parametrami: jeśli pierwszy parametr zostanie zwrócony do wartości true, zostanie wydrukowany, w innym przypadku drugi

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

z trzech parametrów: jeżeli pierwszy parametr ma wartość prawdziwą na sekundę będą drukowanie, ponieważ trzeci

// 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

Podczas gdy ten link może odpowiedzieć na pytanie, lepiej umieścić w nim istotne części odpowiedzi i podać link do odsyłacza. Odpowiedzi dotyczące linków mogą stać się nieprawidłowe, jeśli strona z linkami się zmieni. - [Z recenzji] (/ recenzja/niskiej jakości-posts/10731433) –

+1

@progressive_overload edytowane, thanx – Terion

0

To poniżej kod może być użyty na potrójnym lub jakiejkolwiek ekspresji eval.

Ostrzeżenie: proszę użyć tego kodu w scenariuszu, w którym można bezpiecznie używać eval.

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

{{/if}} 

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

{{/if}} 

kierownica funkcje pomocnicze

myfunc: (exp, ...a) => { 
    return eval(exp); 
    } 
Powiązane problemy