如果情况如此,我遇到了灰尘问题。我有一个部分指向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}
这不起作用。任何人都知道我哪里出错了?
答案 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