繁体   English   中英

如何比较车把中的值?

[英]How to compare a value in handlebars?

我想根据条件显示不同的 HTML。

它似乎没有比较这两个值,它总是显示第一个变体。 如何将预定义值与来自 JSON 的原始值进行比较,以便它可以正确执行?

{{#each this}}
  {{#each visits}}
    <div class="row">
      {{#if variable_from_json }}
        <div class="col-lg-2 col-md-2 col-sm-2">
          <i class="fa fa-home"></i>
         </div>
      {{else}}
        <div class="col-lg-2 col-md-2 col-sm-2">
          <i class="fa fa-plus symbol-hospital"></i>
        </div>
      {{/if}}
    </div>
  {{/each}}
{{/each}}

JS代码

Handlebars.registerHelper('if', function (variable_from_json, options) {
    if (variable_from_json === "M") {
        return options.fn(this);
    } else {
        return options.inverse(this);
    }
});

比较 ==,>=,|| 之类的值 ,&& 创建一个可以处理所有情况的助手

Handlebars.registerHelper( "when",function(operand_1, operator, operand_2, options) {
  var operators = {
   'eq': function(l,r) { return l == r; },
   'noteq': function(l,r) { return l != r; },
   'gt': function(l,r) { return Number(l) > Number(r); },
   'or': function(l,r) { return l || r; },
   'and': function(l,r) { return l && r; },
   '%': function(l,r) { return (l % r) === 0; }
  }
  , result = operators[operator](operand_1,operand_2);

  if (result) return options.fn(this);
  else  return options.inverse(this);
});

在车把文件中使用此运算符 例如。 == 运算符

 {{#when <operand1> 'eq' <operand2>}}
   // do something here
 {{/when}}

这是 Sunil More 的回答,只是添加了 <、>= 和 <=。

 Handlebars.registerHelper("when", (operand_1, operator, operand_2, options) => {
    let operators = {                     //  {{#when <operand1> 'eq' <operand2>}}
      'eq': (l,r) => l == r,              //  {{/when}}
      'noteq': (l,r) => l != r,
      'gt': (l,r) => (+l) > (+r),                        // {{#when var1 'eq' var2}}
      'gteq': (l,r) => ((+l) > (+r)) || (l == r),        //               eq
      'lt': (l,r) => (+l) < (+r),                        // {{else when var1 'gt' var2}}
      'lteq': (l,r) => ((+l) < (+r)) || (l == r),        //               gt
      'or': (l,r) => l || r,                             // {{else}}
      'and': (l,r) => l && r,                            //               lt
      '%': (l,r) => (l % r) === 0                        // {{/when}}
    }
    let result = operators[operator](operand_1,operand_2);
    if(result) return options.fn(this); 
    return options.inverse(this);       
  });

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM