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

2019-04-08 10:59发布

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

3条回答
beautiful°
2楼-- · 2019-04-08 11:15

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.

查看更多
祖国的老花朵
3楼-- · 2019-04-08 11:28

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}}
查看更多
啃猪蹄的小仙女
4楼-- · 2019-04-08 11:35

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
          }
      });
    
查看更多
登录 后发表回答