在dust.js的条件语句中,$idx和$len是什么意思?

12

关于dust的文档太糟糕了,我已经看遍了所有可能找到的内容,但仍然无法弄清楚它应该如何工作。

我正在遇到关于所谓的特殊值$idx和$len的问题,如果我猜对了的话,它们在类似数组的部分迭代过程中返回当前索引和该类似数组的部分长度。我有一个@if条件(实际上有多个),我想要格式化一个模板,但是这些值似乎不起作用,这就导致了以下问题:

  1. $idx和$len在dust.js中是否是真正的特殊值?
  2. 您可以在@if语句中使用它们吗?如果可以,应该怎样使用?
  3. 假设1=true,那么$idx从零开始计数吗?

以下是我的模板:

{#myArray}
  {name}{@sep}, {/sep}{@if cond="('{$idx}' == '{$len} - 2')"}and {/if}{@if cond="('{$idx}' == '{$len} - 1')"}{@if cond="('{$len}' == '1')"} is {:else} are {/if}here.{/if}
{/myArray}

代码的预期目标:

  • 如果只有一个人,输出字符串 "Jake is here."
  • 如果有两个人,输出字符串 "Jake and John are here."
  • 如果有三个或以上人,输出字符串 "Jake, John, and Bill are here."(显然,根据需要添加逗号分隔的姓名)

如果 $idx 和 $len 特殊变量按照人们想象中的方式运行,那么这个模板将会实现我想要的功能。但是,我认为 $idx 或 $len(或者两者都不是)没有被实现。如果它们不存在,那么我该如何创建一个能够实现我需求的模板呢?

2个回答

5
  1. Yes, they are special helpers in Dust.
  2. But according to the dustjs-linkedin wiki (under the @if section), they cannot be used inside lists of primitives. In such cases you must use the following syntax:

    {@idx}{.}{/idx}
    

长度也是同样的情况。所以,您的模板应该类似于这个jsFiddle中的模板

3. 是的,$idx和@idx都是从0开始计数的。(更多信息请参见此处)。


代码有个小错误...... 判断 is/are 需要检查是否 === 0,而不是 1。除此之外,完美,谢谢! - Robert C. Barth
@RobertC.Barth 谢谢。我已经用更新后的逻辑更新了jsFiddle链接。 - smfoote

0

但根据dustjs-linkedin维基百科(在@if部分下),它们不能用于原始列表中。在这种情况下,您必须使用以下语法:

{@idx}{.}{/idx}

现在这已经改变了,即使在原始数据类型中,$idx和$len也可以使用


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