有没有办法在两个 {@eq} 条件之间进行逻辑或?
Is there a way to do logical OR between two {@eq} conditionals?
我正在寻找一种在两个 {@eq} 条件之间进行逻辑或运算的方法。我可以用一些直接的方式来做吗?
为了便于说明,请考虑以下示例。我正在遍历 result
数组。如果 grp
参数等于 all,我不想过滤进入页面的内容。如果不等于all,那么我想通过group
属性等于grp
来过滤数组元素。条件在JS中表示为(grp == "all" || group == grp)
。目前,没有任何办法在这两个条件之间进行或运算,我不得不重复循环的主体——这违反了 DRY 原则。
{#result grp=grp}
{@eq key=grp value="all"}
BODY
{:else}
{@eq key=group value=grp}
BODY
{/eq}
{/eq}
{/result}
特殊的 {@any}
帮助程序允许您表达逻辑或。 (还有一个 {@none}
逻辑 NAND 助手。)
{#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}
我正在寻找一种在两个 {@eq} 条件之间进行逻辑或运算的方法。我可以用一些直接的方式来做吗?
为了便于说明,请考虑以下示例。我正在遍历 result
数组。如果 grp
参数等于 all,我不想过滤进入页面的内容。如果不等于all,那么我想通过group
属性等于grp
来过滤数组元素。条件在JS中表示为(grp == "all" || group == grp)
。目前,没有任何办法在这两个条件之间进行或运算,我不得不重复循环的主体——这违反了 DRY 原则。
{#result grp=grp}
{@eq key=grp value="all"}
BODY
{:else}
{@eq key=group value=grp}
BODY
{/eq}
{/eq}
{/result}
特殊的 {@any}
帮助程序允许您表达逻辑或。 (还有一个 {@none}
逻辑 NAND 助手。)
{#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}