有没有办法在灰尘模板中区分 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 之间的区别,您可能会更快乐。
有什么方法可以区分灰尘模板中的 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 之间的区别,您可能会更快乐。