如果情况有灰尘

时间:2013-02-22 00:30:20

标签: if-statement dust.js

如果情况如此,我遇到了灰尘问题。我有一个部分指向2个不同的灰尘模板,具体取决于国家/地区代码

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

我正在尝试制作if else条件,以确定{countryCode}是否为美国。 例如:

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

这不起作用。任何人都知道我哪里出错了?

4 个答案:

答案 0 :(得分:20)

由于潜在的安全漏洞(它在条件上使用eval),{@ 1}}助手已被弃用。我建议改为使用@if助手。

@eq

如果这不起作用,请确保countryCode在您的上下文中可用(您可以使用{@eq key=countryCode value="US"} <p>is country code US</p> {:else} <p>is NOT country code US</p> {/eq} )。

答案 1 :(得分: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 :(得分:2)

如果你迷恋@if但不喜欢使用eval的安全问题,你可以使用我的替代@if帮助器。它提供了一个属性test =&#34; expr&#34;指定你的if条件。 eval不用于评估表达式。

表达式中的变量仅限于用于从上下文访问值的灰尘名称和路径。常量是JavaScript整数,浮点数,十六进制和字符串形式(&#34; xx&#34;或&#39; xx&#39;)。操作数可以是变量&#34;,常量,或二进制或一元表达式,产生一个值。关系运算符是&lt;,&gt;,&lt; =,&gt; =,==,!=。布尔运算符是! (一元),||和&amp;&amp; ..运算符优先级与JavaScript相同,为了清晰起见,或者当优先级不是您想要的时候,允许使用括号。

以下是一个例子:

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

请注意,它仍然有代码允许cond =&#34; expr&#34;使用eval()的属性。这为现有代码提供了迁移路径。

您可以将其安装为npm模块(https://npmjs.org/package/dustmotes-if)。

答案 3 :(得分: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