2012-08-11 41 views
16

En el manillar, ¿hay un operador ternario? No me refiero a if else; Me refiero como a == true ? "a" : "b".¿Hay un operador ternario en handlebars.js?

+2

manillares es sólo JavaScript, por lo que el operador ternario funcionará igual que en JavaScript. – m90

+0

¿Has consultado el sitio web oficial: http://handlebarsjs.com/? Contiene tutoriales ... –

+0

He revisado el sitio web oficial. Pero no vi las explicaciones del operador ternario. – shawnXiao

Respuesta

8

Puede construir su propio ayudante en barras de mano si realmente lo desea. Algo así como ternary(a==true, "a", "b"). Para obtener más información al respecto, consulte el documentation. La idea de m90 no es la idea detrás de los manubrios. La idea es no tener un código explícito en sus plantillas, solo llamadas a ayudantes y objetos.

+0

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

9

El helper if se puede utilizar como un operador ternario pasandole tres argumentos.

En el siguiente ejemplo, un botón tiene un valor predeterminado de "Save Changes", pero cuando model.isSaving es verdadero, el valor cambia temporalmente a Saving....

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

... alternativamente, se utiliza dentro de otro ayudante:

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

¿Podría elaborar o señalar el ejemplo? – majman

+2

@majman He agregado un ejemplo de código para demostrar lo que creo que es la mejor respuesta. – Andrew

1

tengo un ayudante para este (tener en cuenta que otros ayudantes también se pueden utilizar en el interior) 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 dos parámetros: si el primer parámetro se evalúa como verdadero, se imprimirá; de lo contrario, el segundo

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

con tres parámetros: si primer parámetro se evalúa como verdadera segunda se imprimirá, de lo contrario tercera

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

Si bien este enlace puede responder a la pregunta, es mejor incluir las partes esenciales de la respuesta aquí y proporcionar el enlace de referencia. Las respuestas de solo enlace pueden dejar de ser válidas si la página vinculada cambia. - [De la crítica] (/ review/low-quality-posts/10731433) –

+1

@progressive_overload edited, thanx – Terion

0

Este continuación código puede utilizarse para ternario o cualquier tipo de expresión eval.

Advertencia: utilice este código en caso de que eval se pueda utilizar de forma segura.

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

{{/if}} 

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

{{/if}} 

manillar helper función

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