2013-02-22 67 views
8

我遇到了灰尘,如果条件的问题。我有一个部分是,根据国家代码灰尘,如果条件

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

点,2个不同的尘土模板,我试图让一个if else条件,将计算出如果{countryCode}是美国。 例如:

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

这是行不通的。任何人有一个想法,我错了这个?

+0

*条件只是为了使它更容易 – eMarine 2015-08-05 08:03:14

回答

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

Upvoted提及安全漏洞。如何选择?我可以用'eq','gte'等来选择'select'吗?以及如何编写复杂的条件?假设'A> B && B <= C && C!= 10' – thefourtheye 2013-08-16 11:44:30

+1

'select'可以与'eq','gt','lt'等一起使用。复杂的条件目前在单个语句中是不可能的。你必须使用嵌套,并通常最终重复一些代码。已经讨论过创建'和'和'或'助手,但同时,如果可能的话,我会建议更改您的数据。 – smfoote 2013-08-16 20:52:00

+0

你能为此提供资料吗? dustjs-helpers的代码/网站没有提及“if”已被弃用。 – 2014-08-18 07:41:12

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”来指定你的条件。 eval不用于评估表达式。

表达式中的变量仅限于灰尘名称和用于从上下文访问值的路径。常量是JavaScript整数,浮点数,十六进制和字符串形式(“xx”或“xx”)。操作数可以是一个“变量”,一个常量,或一个二元或一元表达式,产生一个值。关系运算符是<,>,< =,> =,==,!=。布尔运算符是! (一元),||和& & ..运算符优先级与JavaScript相同,括号可用于清晰或优先级不符合您的要求。

下面是一个例子:

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

注意,它仍具有代码,以允许COND = “EXPR” 使用的eval()属性。这为现有代码提供了迁移路径。

您可以将其作为npm模块安装(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