在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.
请注意,is
和years
之间有两个空格,如果我们定义了任何年龄,age
就是dust
。如果包含此功能,那么LinkedIn
和dust
的原始创作者是否认为不需要部分内容? 如何在{{1}}?
答案 0 :(得分:0)
你可以像这样使用条件,
<div>
{?module}
{>"{module}"/>
{:else}
{>"{YourDefaultPartial}"}
{/module}
</div>
当{module}
为undefined
或empty string
或falsey
值时,这将有效。
但是,如果指向string
的{{1}}不存在,则会抛出错误。希望这会有所帮助。