Blaze:{{#if}} 语句中的逻辑(Not、Or、And…)

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

有没有办法在{{#if}}语句中进行逻辑运算? 我希望是这样的:

{{#if A && B}}
  some html
{{/if}}

我在 blaze 中找不到关于逻辑的文档,所以我猜它不被支持。我只是想确定一下。很抱歉这个愚蠢的问题...

空格键旨在避免在html中包含逻辑操作。但这并不意味着你不能拥有一个:你需要使用助手。基本上,您有 2 个条件情况:

  • 简单的{{#if something}}和它的双胞胎{{#unless something}}(理解为"if not")。这就是你想要的,你的助手看起来像这样

    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
          }
      });
    

正如 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}}

这是我的版本:

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 向该函数添加了一个参数。