如果在Dust.js中的Else

时间:2015-07-13 13:27:00

标签: javascript dust.js

我的模板是

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

数据

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

它输出"发布商标签编辑器标签"

我想要输出"发布商标签编辑器标签编写者"。由于编写器在模板中未定义,因此应该打印密钥本身。如何在模板中实现此逻辑?基本上应该打印整个数据。

1 个答案:

答案 0 :(得分:2)

根据规定,您无法在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}助手输出。

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

您可以编写helpers来扩展Dust的模板逻辑。在您的上下文中编写帮助程序将是一种提取所需数据的简便方法。在这种情况下,there's already an {@iterate} helper that's been written for you.在包含它并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}

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