9

如果状况不佳,我遇到了灰尘问题。我有一个部分指向 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

4 回答 4

21

由于潜在的安全漏洞,该@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/}它)。

于 2013-02-22T02:00:51.953 回答
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 。前几天我遇到了这个。你需要它才能工作,它不会错误地告诉你它不是。

于 2013-05-09T20:54:12.957 回答
2

如果你喜欢 @if 但不喜欢它使用 eval 的安全问题,你可以使用我的替代 @if 助手。它提供了一个属性 test="expr" 来指定您的 if 条件。eval 不用于评估表达式。

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

这是一个例子:

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

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

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

于 2014-02-05T17:36:58.990 回答
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
于 2017-01-06T14:41:08.580 回答