DustJS中的可选部分

时间:2014-10-30 01:22:38

标签: node.js templates express dust.js

在Dust中可以选择部分吗?让我们说我定义了这样的布局:

<div>
    {>"{module}"/>
</div>

我一直在Express res.locals对象中定义模块。但是,如果我忘了定义一个模块,或者我实际上想要一个默认模块,当我没有定义一个模块时怎么办?更糟糕的是,如果我确定了一个但是它是错误的模块怎么办,这意味着视图文件夹中没有模板文件的名称?我不希望用户看到丑陋的错误消息,这似乎是:

Error: ENOENT, open 'view_path\{module}.dust'

其中{module}是模块的名称,如果我没有指定res.locals.module,则为空字符串。我应该使用try-catch块(甚至不确定如何在dust中执行它们),还是有一种方法可以使模板成为可选的,而不是必需的? 注意:模板是可选的,但module变量(通常)仍然是一个字符串。似乎dust部分是可选的,这意味着如果确切的密钥不可用,则不会包含该部分。例如,假设我有上下文{friends: [{name: "Harry"}, {name: "Ron"}, {name: "Hermione"}]}。如果我定义部分:

{#friends}
    {name} is {age} years old.
{/friends}

将输出

Harry is  years old.
Ron is  years old.
Hermione is  years old.

请注意,isyears之间有两个空格,如果我们定义了任何年龄,age就是dust。如果包含此功能,那么LinkedIndust的原始创作者是否认为不需要部分内容? 如何在{{1}}?

中指定可选的部分内容

1 个答案:

答案 0 :(得分:0)

你可以像这样使用条件,

<div>
  {?module}
    {>"{module}"/>
  {:else}
    {>"{YourDefaultPartial}"}
  {/module}
</div>

{module}undefinedempty stringfalsey值时,这将有效。

但是,如果指向string的{​​{1}}不存在,则会抛出错误。希望这会有所帮助。