可以优化此 Dust "logic" 吗?

Possible to optimize this Dust "logic"?

我在 Dust 部分工作,如果满足条件,我想显示一个固定的 header。

首先,我想知道用户是否表示他们在特定城市工作。如果他们不在我列表中的任何城市,我什么也不想显示……除非他们住在夏威夷。然后我想显示相同的 header.

{@select key=workingCity}
  {@eq value=1}Fixed Header{/eq} {! Pittsburgh !}
  {@eq value=2}Fixed Header{/eq} {! Paris !}
  {@eq value=3}Fixed Header{/eq} {! Phoenix !}
  {@default}
    {@eq key=state value=50} {! Hawaii !}
      Fixed Header
    {/eq}
  {/default}
{/select}

有什么办法可以避免将 'Fixed Header' 放在四个不同的位置?

我知道我可以只引用其中包含该特定标题的另一个部分...但是无论如何我都需要将该部分引用放在四个位置!

这是优化到极致了吗?

如果您使用的是足够新版本的 dust 和 dust-helpers,您可以使用新的 {@any}{@none} 助手——它们正是用于此用例.

{@select key=workingCity}
  {@eq value=1/} {! Pittsburgh !}
  {@eq value=2/} {! Paris !}
  {@eq value=3/} {! Phoenix !}
  {@any}Fixed Header{/any}
  {@none}
    {@eq key=state value=50} {! Hawaii !}
      Fixed Header
    {/eq}
  {/none}
{/select}

这使您得到 header 的两个实例,这可能就足够了。这些助手的文档位于 Dust Helpers.

您还可以将模板中的更多逻辑带入 context helper,这是 Dust 真正擅长的。这样,逻辑仍然在Javascript,模板只是为了显示。

{#showFixedHeader}
  Fixed Header
{:else}
  Optionally something else!
{/showFixedHeader}

在您的上下文中:

{
  "showFixedHeader": function(chunk, context) {
    var workingCity = context.get('workingCity');
    var state = context.get('state');
    return [1,2,3].indexOf(workingCity) > -1 || state === 50;
  }
}

现在您的模板可读性极强,如果您添加第四个城市,模板根本不需要更改。