我正在寻找一种在两个{@eq}条件之间进行逻辑OR的方法。我能以一种直截了当的方式做到吗?
为了便于说明,请考虑以下示例。我正在迭代result
数组。如果grp
参数等于 all ,我不想过滤进入页面的内容。如果它不等于 all ,那么我想按group
属性等于grp
来过滤数组元素。该条件将在JS中表示为(grp == "all" || group == grp)
。目前,在两种情况之间没有任何办法进行OR,我必须重复循环的BODY - 违反DRY原则。
{#result grp=grp}
{@eq key=grp value="all"}
BODY
{:else}
{@eq key=group value=grp}
BODY
{/eq}
{/eq}
{/result}
答案 0 :(得分:1)
特殊{@any}
助手允许您表达逻辑OR。 (逻辑NAND还有一个{@none}
帮助器。)
{#result grp=grp}
{@select}
{@eq key=grp value="all"/}
{@eq key=group value=grp/}
{@any}BODY{/any}
{/select}
{/result}
如果你需要做一些比这更复杂的事情 - 例如,如果BODY依赖于grp
和group
的值 - 你总是可以编写一个自定义的Dust助手来移动你的逻辑到Javascript。这是一个简短的示例,您可以在documentation on context helpers中进一步阅读。
{
"filter": function(chunk, context, bodies, params) {
var group = context.resolve(params.group);
var grp = context.resolve(params.grp);
if (grp == "all" || group == grp) {
chunk = chunk.render(bodies.block, context.push({
somethingNewBasedOff: "the value of group and grp"
}));
}
return chunk;
}
}
然后你就像使用它一样:
{#result grp=grp}
{#filter group=group grp=grp}
The filter test passed. The new data I added to the context is {somethingNewBasedOff}
{/filter}
{/result}