有没有办法在灰尘模板中区分 false 和 undefined ?

Is there a way to differentiate between false and undefined in a dust template?

有什么方法可以区分灰尘模板中的 false 和 undefined 吗?我相信:

{^myVariable}
    Hello
{/myVariable}
如果 myVariable 未定义,

会打印 Hello 吗?

如您所见,Dust 比较的不是真实性,而是 "emptiness",因此您无法专门检查变量的虚假性。

您可以改用 {@eq} 比较器,但您必须小心比较的对象。您不能盲目地使用 Javascript 关键字 undefined,因为 Dust 只会将其读取为对变量 undefined 的引用(这可能是安全的,但可能会给您带来错误)。所以这没关系:

{@eq key=myVariable value="undefined" type="string"}myVariable is undefined{/eq}
{@eq key=myVariable value=somethingImSureDoesntExist}myVariable is undefined{/eq}

但是你不能反向测试,因为使用 type="boolean" 会同时转换键和值

{@eq key=myVariable value="false" type="boolean"}
  myVariable might be 0, undefined, null, false, etc...
{/eq}
{@eq key=myVariable value=somethingInContextIKnowIsAlwaysFalse}
  This is sloppy because you have to include a dummy "false" in your context, but it works!
{/eq}

所以如果你真的需要测试=== false,你应该写一个快速助手:

dust.helpers.isFalse = function(chunk, context, bodies, params) {
  return context.resolve(params.key) === false;
}

并像这样使用它:

{@isFalse key=myVariable}
  myVariable is exactly false!
{:else}
  myVariable is something else
{/isFalse}

综上所述,如果您允许 Dust 使用它的空检查,而不是要求您的模板关心 undefined 和 false 之间的区别,您可能会更快乐。