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

时间:2016-01-12 16:02:42

标签: dust.js

有没有办法区分灰尘模板中的false和undefined?我相信:

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

会打印myVariable吗?

1 个答案:

答案 0 :(得分:2)

正如你所注意到的,Dust并没有比较真实性,而是“空虚”,因此你无法专门检查变量的虚假性。

您可以使用{@eq}比较器,但您必须小心比较。你不能盲目地使用Javascript关键字undefined,因为Dust只会将它读作变量undefined的引用(这可能是安全的,但可能会给你一个bug)。所以这没关系:

{@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之间的区别。