如果其他在 Dust.js

If Else in Dust.js

我的模板是

{#results}
    {#publisher}Publisher Label {/publisher}
    {#editor}Editor Label {/editor}
    {#author}Author Label {/author}
{/results}

数据为

{
    results: {
        "publisher": "Pankaj",
        "editor": "Mike",
        "writer": "Henry"
    }
}

It outputs "Publisher Label Editor Label "

我想要输出 "Publisher Label Editor Label writer"。逻辑是因为 writer 在模板中未定义,所以它应该打印密钥本身。如何在模板中实现此逻辑?基本上应该打印整个数据。

如前所述,您无法仅在 Dust 中解决此问题。你有几个选择,我会详细说明。

选项 1:更改数据格式

Dust 仅迭代数组,而迭代逻辑正是您在这里真正想要的,因为您想要查看所有键,而不仅仅是模板中指定的键。

将您的数据更改为更像这样:

{
  results: [
    { role: "publisher", name: "Pankaj" },
    { role: "editor", name: "Mike" },
    { role: "writer", name: "Henry" }
  ]
}

将允许您像这样编写模板(并且需要 dustjs-helpers):

{#results}
  {@select key=role}
    {@eq value="publisher"}Publisher Label{/eq}
    {@eq value="editor"}Editor Label{/eq}
    {@eq value="author"}Author Label{/eq}
    {@none}{role}{/none}
  {/select}
{/results}

如果其他真值测试的 none 评估为真,则特殊的 {@none} 帮助程序输出。

选项 2:自定义除尘助手,{@iterate}

您可以编写 helpers 来扩展 Dust 的模板逻辑。将助手写入您的上下文将是提取所需数据的简便方法。在这种情况下,已经为您编写了一个 {@iterate} 帮助器。 像这样使用它,包括它和 dustjs-helpers:

{@iterate key=results}
  {@select key=$key}
    {@eq value="publisher"}Publisher Label{/eq}
    {@eq value="editor"}Editor Label{/eq}
    {@eq value="author"}Author Label{/eq}
    {@none}{$key}{/none}
  {/select}
{/iterate}

虽然您必须添加另一个助手,但如果您无法重新格式化数据,这可能是更好的选择。