灰尘在条件下的作用

9

我在处理一个dust if条件时遇到了麻烦。 我有一个partial指向2个不同的dust模板,具体取决于国家代码。

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

这个没用。有没有人知道我在哪里做错了?


条件只是为了更容易找到它。 - eMarine
4个回答

22

@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/}进行检查)。

因为提到了安全漏洞,所以点赞。那么select呢?我可以用eqgte等与select一起使用吗?如何编写复杂的条件语句呢?比如说A > B && B <= C && C != 10 - thefourtheye
1
select 可以与 eqgtlt 等一起使用。目前无法在单个语句中使用复杂条件。您必须使用嵌套,并且通常会重复一些代码。有关创建 andor 助手的讨论已经进行,但同时,我建议尽可能更改您的数据。 - smfoote
请问您能提供这个的源代码吗?dustjs-helpers的代码/网站并没有提到“if”已被弃用。 - Eirik Hoem
谢谢提到contextDump,那非常方便。 - Paul Sheldrake

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。 我前几天遇到了这个问题。 您需要它才能正常工作,否则不会报错告诉您未加载。


FYI,"default"在最新版本的dust中已被弃用。https://dev59.com/4m7Xa4cB1Zd3GeqPtsV4 - RayLoveless

2
如果你喜欢@if,但不喜欢它使用eval带来的安全问题,那么你可以使用我的替代@if助手。它提供了一个属性test="expr"来指定你的if条件。不使用eval来评估表达式。
表达式中的变量仅限于dust名称和用于从上下文访问值的路径。常量是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)。

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接