【发布时间】:2016-07-29 17:12:22
【问题描述】:
有没有办法在 {{#if}} 语句中进行逻辑运算? 我希望得到类似的东西:
{{#if A && B}}
some html
{{/if}}
我在 blaze 中找不到有关逻辑的文档,所以我猜它不受支持。我只是想确定一下。对不起,这个相当愚蠢的问题......
【问题讨论】:
标签: meteor meteor-blaze
有没有办法在 {{#if}} 语句中进行逻辑运算? 我希望得到类似的东西:
{{#if A && B}}
some html
{{/if}}
我在 blaze 中找不到有关逻辑的文档,所以我猜它不受支持。我只是想确定一下。对不起,这个相当愚蠢的问题......
【问题讨论】:
标签: meteor meteor-blaze
正如 Billy Bob 所建议的,您需要参数化的助手。以下是您可以在任何情况下使用的两个全局帮助器:
Template.registerHelper('and',(a,b)=>{
return a && b;
});
Template.registerHelper('or',(a,b)=>{
return a || b;
});
然后你可以使用这些:
{{#if and a b}}
a and b are both true-ish
{{/if}}
{{#if or a b}}
a or b is true-ish
{{/if}}
【讨论】:
空格键旨在避免在 html 中包含逻辑操作。但这并不意味着你不能拥有一个:你需要使用助手。基本上,您有 2 个条件案例:
简单的{{#if something}} 和它的孪生{{#unless something}}(理解为“如果不是”)。这就是你想要的,你的助手看起来像这样
Meteor.yourTemplate.helpers({
something : function () {
return A && B
}
});
更复杂的{{#if something 'value'}} 为something 助手使用参数:
Meteor.yourTemplate.helpers({
something : function (value) {
if (value === true){
return true
} else {
return false
}
});
【讨论】:
这是我的版本:
Template.registerHelper("and", function() {
return Array.prototype.slice.call(arguments, 0, -1).filter(arg => arg == true).length == arguments.length - 1;
});
Template.registerHelper("or", function() {
return Array.prototype.slice.call(arguments, 0, -1).filter(arg => arg == true).length > 0;
});
您现在可以使用 x 参数进行检查,例如:
{{#if and check_1 check_2 check3}}
你会注意到 slice(0,-1),Blaze 向函数添加了一个参数。
【讨论】: