2013-02-22 15 views
8

Ho problemi con una polvere se condizione. Ho un parziale che punta a 2 diversi modelli di polvere a seconda del codice PaesePolvere se condizione

{>"receipt/merchantInfo/merchantInfo_{countryCode}"/} 

Sto cercando di fare un altro se condizione che sarà capire se il {countryCode} siamo noi. Esempio:

{@if cond="'{countryCode}' == 'US'"} 
<p>is country code US</p> 
{:else} 
<p>is NOT country code US</p> 
{/if} 

Questo non funziona. Qualcuno ha un'idea di dove mi sono sbagliato?

+0

* condizione solo per rendere più facile la scrittura di un documento – eMarine

risposta

19

L'helper @if è stato deprecato a causa di un potenziale buco di sicurezza (utilizza eval sulla condizione). Suggerirei invece di utilizzare l'helper @eq.

{@eq key=countryCode value="US"} 
    <p>is country code US</p> 
{:else} 
    <p>is NOT country code US</p> 
{/eq} 

Se questo non funziona, assicurarsi che countryCode è disponibile nel vostro contesto (è possibile utilizzare {@contextDump/} per questo).

+0

In aumento per menzionare il buco di sicurezza. Che ne dici di "selezionare"? Posso usare 'select' con' eq', 'gte' etc? e come posso scrivere condizioni complesse? Diciamo che 'A> B && B <= C && C! = 10' – thefourtheye

+1

' select' può essere usato con 'eq',' gt', 'lt', ecc. I condizionali complessi non sono attualmente possibili in una singola istruzione . Devi usare il nesting e di solito finiscono per ripetere del codice. Si è parlato di creare 'e' e' o' aiutanti, ma nel frattempo, consiglierei di cambiare i dati, se possibile. – smfoote

+0

Potete per favore fornire la fonte per questo? Il codice/sito web per dustjs-helper non dice che "se" è deprecato. –

10

farei questo:

{@select key=countryCode } 
    {@eq value="US"}<p>is country code US</p>{/eq} 
    {@eq value="UK"}<p>is country code UK</p>{/eq} 
    {@default}<p>is NOT country code US or UK</p>{/default} 
{/select} 

Assicurarsi che si sta utilizzando la versione 1.x o successiva.

Assicurarsi di aver caricato il Helpers. Mi sono imbattuto in questo l'altro giorno. Ne hai bisogno perché funzioni e non ti verrà detto che non lo è.

2

Se sei innamorato di @if ma non ti piacciono i problemi di sicurezza relativi all'utilizzo di eval, puoi utilizzare il mio helper alternativo @if. Fornisce un attributo test = "expr" per specificare la condizione if. eval NON è usato per valutare l'espressione.

Le variabili nell'espressione sono limitate ai nomi di polvere e al percorso utilizzato per accedere ai valori dal contesto. Le costanti sono forme integer, float, hex e string JavaScript ("xx" o "xx"). Gli operandi possono essere una "variabile", una costante, o un'espressione binaria o unaria che produce un valore. Gli operatori relazionali sono <,>, < =,> =, ==,! =. Gli operatori booleani sono! (unario), || e & & .. La precedenza dell'operatore è la stessa di JavaScript e le parentesi sono consentite per chiarezza o per quando la precedenza non è quella che si desidera.

Ecco un esempio:

{@if test="state == 'CA' || state == 'NY'"} 
    true stuff goes here 
{:else} 
    false stuff goes here 
{/if} 

Nota che ha ancora il codice per consentire la cond = attributo "expr" che utilizza eval(). Questo fornisce un percorso di migrazione per il codice esistente.

È possibile installarlo come modulo npm (https://npmjs.org/package/dustmotes-if).

2

È anche possibile utilizzare:

{#key} 
    Some content 
{:else} 
    Some other content, if key doesn't have a value 
{/key} 

Ad esempio:

dati

{ 
    firstName: "Mickey", 
    lastName: "Mouse", 
    website: null, 
    phone:  "1-800-DISNEYWORLD" 
} 

polvere Template

<p>First Name: {firstName}</p> 
<p>Last Name: {lastName}</p> 
{#website} 
    <p>Website: {website}</p> 
{:else} 
    <p>Phone: {phone}</p> 
{/website} 

uscita:

First Name: Mickey 
Last Name: Mouse 
Phone: 1-800-DISNEYWORLD