2013-02-22 13 views
8

Mam problem z kurzem, jeśli stan. Mam częściowe, które wskazuje na 2 różnych szablonów pyłu w zależności od kodu krajuKurz, jeśli stanie

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

próbuję uczynić if warunek innego, że będzie dowiedzieć się, czy {countryCode} jest US. Przykład:

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

To nie działa. Ktoś ma pomysł, gdzie się pomyliłem?

+0

* stan tylko po to, aby ułatwić wybielenie – eMarine

Odpowiedz

19

Pomocnik @if został uznany za przestarzały z powodu potencjalnej luki bezpieczeństwa (używa eval pod warunkiem). Polecam zamiast tego pomocnika @eq.

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

Jeśli to nie działa, upewnij się countryCode jest dostępna w danym kontekście (można użyć {@contextDump/} do tego).

+0

Wzniesiono głos za wzmiankę o luce bezpieczeństwa. Co powiesz na "wybierz"? Czy mogę użyć 'select' z' eq', 'gte' itp? i jak mogę pisać złożone warunki? Powiedzmy, że 'A> B && B <= C && C! = 10' – thefourtheye

+1

' select' może być używane z 'eq',' gt', 'lt', itd. Złożone warunki nie są obecnie możliwe w pojedynczej instrukcji . Musisz użyć zagnieżdżenia i zazwyczaj kończy się to powtarzaniem kodu. Były rozmowy o tworzeniu pomocników '' i 'i' or', ale w międzyczasie zalecam zmianę danych, jeśli to możliwe. – smfoote

+0

Czy możesz podać źródło tego? Kod/strona internetowa dla pomyłek-pomyłek nie wspomina o tym, że "jeśli" jest nieaktualne. –

10

Chciałbym to zrobić:

{@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} 

Upewnij się, że używasz wersji 1.x lub później.

Upewnij się, że załadowano Helpers. Wpadłem na to pewnego dnia. Potrzebujesz tego do działania i nie będzie to oznaczało błędu, mówiącego, że tak nie jest.

2

Jeśli jesteś zachwycony @if, ale nie lubisz problemów bezpieczeństwa związanych z używaniem eval, możesz użyć mojego alternatywnego pomocnika @if. Dostarcza atrybutu test = "expr" do określenia twojego warunku jeśli. eval NIE jest używany do oceny wyrażenia.

Zmienne w wyrażeniu są ograniczone do nazw kurzu i ścieżek używanych do uzyskania dostępu do wartości z kontekstu. Stałe to JavaScript integer, float, hex i string ("xx" lub "xx"). Argumenty mogą być wyrażeniem "zmiennym", stałym lub binarnym lub jednostkowym, dającym wartość. Operatory relacyjne to <,>, < =,> =, ==,! =. Operatory Boolean są! (unary), || i & & .. Priorytet operatorów jest taki sam, jak JavaScript, a nawiasy są dozwolone w celu zachowania przejrzystości lub gdy pierwszeństwo nie jest zgodne z oczekiwaniami.

Oto przykład:

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

Należy zauważyć, że nadal ma kod aby umożliwić cond = "expr" atrybut, który używa eval(). Zapewnia to ścieżkę migracji dla istniejącego kodu.

Można go zainstalować jako moduł npm (https://npmjs.org/package/dustmotes-if).

2

Można również użyć:

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

Na przykład:

Danych

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

kurz szablon

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

wyjściowa:

First Name: Mickey 
Last Name: Mouse 
Phone: 1-800-DISNEYWORLD 
Powiązane problemy