Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Blaze: Logic (Not, Or, And…) in {{#if}} statement

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...

like image 570
Joan Avatar asked Apr 08 '16 12:04

Joan


2 Answers

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}}
like image 105
Michel Floyd Avatar answered Sep 21 '22 15:09

Michel Floyd


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
          }
      });
    
like image 29
Billybobbonnet Avatar answered Sep 20 '22 15:09

Billybobbonnet