Is there a way to do logic operation in {{#if}} statement?
I was hoping for something like:
{{#if A && B}}
some html
{{/if}}
I couldn’t find documentation about logic in blaze, so I guess it’s not supported. I just wanted to be sure. Sorry for the rather stupid question...
As Billy Bob suggests, you would need parameterized helpers. Here are two global helpers you could use in any context:
Template.registerHelper('and',(a,b)=>{
return a && b;
});
Template.registerHelper('or',(a,b)=>{
return a || b;
});
Then you could use these with:
{{#if and a b}}
a and b are both true-ish
{{/if}}
{{#if or a b}}
a or b is true-ish
{{/if}}
Spacebars is designed to avoid including logic operations in the html. But it does not mean you can't have one : you need to use helpers. Basically, you have 2 conditional cases:
The simple {{#if something}}
and its twin {{#unless something}}
(understand it as "if not"). This is what you want, and your helper would look like this
Meteor.yourTemplate.helpers({
something : function () {
return A && B
}
});
The more complicated {{#if something 'value'}}
where you use an argument for your something
helper :
Meteor.yourTemplate.helpers({
something : function (value) {
if (value === true){
return true
} else {
return false
}
});
here is my version :
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;
});
You can now use x arguments to check, like :
{{#if and check_1 check_2 check3}}
You will notice the slice(0,-1), Blaze add one more argument to the function.