【问题标题】:ember if or statementember if 或语句
【发布时间】:2014-07-17 18:00:21
【问题描述】:

在 ember 中使用条件时,是否可以使用 OR

{{#if foo OR bar}}

{{#if foo || bar}}

docs 中似乎没有任何内容。

【问题讨论】:

标签: javascript templates ember.js conditional handlebars.js


【解决方案1】:

你应该把逻辑移到你的控制器上

App.SomeController = Em.Controller.extend({
  foo: true,
  bar: false,

  fooOrBar: Em.computed.or('foo', 'bar')
});

尽量减少模板逻辑

{{#if fooOrBar}}

【讨论】:

    【解决方案2】:

    使用https://github.com/jmurphyau/ember-truth-helpers:

    ember install ember-truth-helpers
    

    那你可以说

    {{#if (or foo bar)}}
    

    根据您的观点,Kingpin2k's answer 有点过时了。以前,社区的理解是模板应该在很大程度上没有逻辑。随着时间的推移,我们的观点已经转向在模板中添加更多的声明性逻辑——ember-composable-helpers 就是一个很好的例子。

    【讨论】:

      【解决方案3】:

      您可以创建自定义 Handlebar 辅助函数来检查条件运算符。

      Ember.Handlebars.registerHelper('ifCond', function (temp_v1, operator, temp_v2, options) {
      var v1,v2;
      v1 = Ember.Handlebars.get(this, temp_v1, options);
      v2 = Ember.Handlebars.get(this, temp_v2, options);    
      switch (operator) {
          case '||':
              return (v1 || v2) ? options.fn(this) : options.inverse(this);
          case '&&':
              return (v1 && v2) ? options.fn(this) : options.inverse(this);
          case '==':
              return (v1 == v2) ? options.fn(this) : options.inverse(this);
          default:
              return options.inverse(this);
      }
      });
      

      你可以在你的模板中调用它

      {{#ifCond foo '||' bar}}
          <div>Conditional helpers works </div>
      {{/ifCond}}
      

      【讨论】:

      • 这在 ember 车把中不起作用,它不支持块助手。
      • @kingpin2k 我给出的是自定义车把助手。它可以用于 ember 车把,并且可以使用。请检查 jsbin - emberjs.jsbin.com/copos/1
      • 不行,只能第一次用,换一个值试试,不会重新计算,jsbin.com/xijoreya/1/edit
      • 我已经给出了自定义 ifCondition 的示例来检查您的模板,您可以添加所有运算符,例如 (&&、||、==、===、!=、!==、, >=)。有一个通用的方法来检查模板中的任何条件。这里不会重新计算。谢谢指点。
      猜你喜欢
      • 1970-01-01
      • 2016-02-22
      • 1970-01-01
      • 1970-01-01
      • 2017-11-30
      • 2014-12-03
      • 2010-09-21
      • 2013-06-24
      • 2013-10-17
      相关资源
      最近更新 更多