2013-02-22 2 views
8

У меня возникли проблемы с пылью, если состояние. У меня есть частичный, который указывает на 2-х различных шаблонов пыли в зависимости от кода страныПыль, если состояние

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

Я пытаюсь сделать, если другое условие, которое будет выяснить, если {countryCode} является США. Пример:

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

Это не работает. У кого-нибудь есть идея, где я ошибся с этим?

+0

* Состояние только для того, чтобы облегчить его обжиг – eMarine

ответ

19

Помощник @if устарел из-за потенциального отверстия безопасности (он использует условие eval при условии). Вместо этого я рекомендовал бы использовать помощник @eq.

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

Если это не работает, убедитесь, что COUNTRYCODE доступен в вашем контексте (вы можете использовать {@contextDump/} для этого).

+0

Упомянуто для обозначения дыры в безопасности. Как насчет 'select'? Могу ли я использовать 'select' с' eq', 'gte' и т. Д.? и как я могу написать сложные условия? Предположим, что 'A> B && B <= C && C! = 10' – thefourtheye

+1

' select' может использоваться с 'eq',' gt', 'lt' и т. Д. В настоящее время невозможны сложные условия в одном выражении , Вы должны использовать вложенность и, как правило, повторять некоторый код. Были разговоры о создании помощников 'и' и 'или', но в то же время я рекомендовал бы поменять ваши данные, если это возможно. – smfoote

+0

Не могли бы вы предоставить источник для этого? В коде/веб-сайте для пылевых помощников не упоминается, что «если» устарело. –

10

Я хотел бы сделать это:

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

Убедитесь, что вы используете версию 1.x или более поздней версии.

Убедитесь, что вы загрузили Helpers. Я столкнулся с этим на днях. Вам нужно, чтобы это работало, и это не будет ошибкой, говоря вам, что это не так.

2

Если вы влюблены в @if, но не любите проблемы безопасности, связанные с его использованием eval, вы можете использовать мой альтернативный помощник @if. Он предоставляет атрибут test = "expr", чтобы указать ваше условие if. eval НЕ используется для оценки выражения.

Переменные в выражении ограничены именами пыли и путями, используемыми для доступа к значениям из контекста. Константы - это целые числа JavaScript, float, hex и string («xx» или «xx»). Операнды могут быть «переменной», константой или двоичным или унарным выражением, дающим значение. Операторы отношения <,>, < =,> =, ==,! =. Булевы операторы! (унарный), || и & & .. Приоритет оператора совпадает с JavaScript, и круглые скобки допускаются для ясности или когда приоритет не является тем, что вы хотите.

Вот пример:

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

Обратите внимание, что она по-прежнему имеет код разрешить Cond = "ехрг" атрибут, который использует Eval(). Это обеспечивает путь миграции для существующего кода. (https://npmjs.org/package/dustmotes-if).

2

Вы также можете использовать:

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

Например:

данных

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

пыли шаблона:

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

Выход:

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

 Смежные вопросы

  • Нет связанных вопросов^_^