有没有办法区分灰尘模板中的false和undefined?我相信:
{^myVariable}
Hello
{/myVariable}
如果Hello
未正确定义,会打印myVariable
吗?
答案 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之间的区别。