【问题标题】:Is there a ternary operator in handlebars.js?handlebars.js 中是否有三元运算符?
【发布时间】:2012-08-08 14:13:07
【问题描述】:

在 Handlebars 中,是否有三元运算符?我不是说if else;我的意思是像a == true ? "a" : "b"

【问题讨论】:

  • 你查看过官方网站:handlebarsjs.com吗?它包含教程...
  • 我查了官网,但是没有看到三元运算符的解释。

标签: javascript templates handlebars.js


【解决方案1】:

if 助手可以通过向其传递三个参数来用作三元运算符。

在以下示例中,按钮的默认值为"Save Changes",但当model.isSaving 为真时,该值会临时更改为Saving...

<button>{{if model.isSaving "Saving..." "Save Changes"}}</button>

...或者,在另一个助手中使用:

{{input type="submit" value=(if model.isSaving "Saving..." "Save Changes")}}

【讨论】:

  • @majman 我添加了一个代码示例来演示我认为最好的答案。
  • 对我不起作用。不得不求助于{{#if model.isSaving}}"Saving..."{{else}}"Save Changes"{{/if}}
【解决方案2】:

如果你真的想的话,你可以在handlbars中建立你自己的助手。类似于ternary(a==true, "a", "b")。有关这方面的更多信息,请参阅documentation。 m90 的想法不是车把背后的想法。这个想法是在你的模板中没有明确的代码,只调用助手和对象。

【讨论】:

    【解决方案3】:

    为此我有一个助手(注意里面也可以使用其他助手) https://gist.github.com/terion-name/d87ed8907f1bb2e25f32

    // app/helpers/iftrue.js
    import Ember from 'ember';
    
    export function iftrue(params) {
      if (params[0]) {
        return params.length === 2 ? params[0] : params[1];
      }
      if (params.length === 2) {
        return params[1];
      } else if (params.length === 3) {
        return params[2];
      }
      return null;
    }
    
    export default Ember.Helper.helper(iftrue);
    

    有两个参数:如果第一个参数计算结果为 true,则打印,否则为第二个

    {{iftrue project.price 'N/A'}} // $9.99
    {{iftrue project.priceNotAvailable 'N/A'}} // N/A
    

    使用三个参数:如果第一个参数计算结果为真,则打印第二个,否则打印第三个

    // If deadline is set formatted date will be printed, otherwise 'N/A'
    {{iftrue project.deadline (moment-format project.deadline 'DD.MM.YYYY') 'N/A'}} 
    

    【讨论】:

      【解决方案4】:

      以下代码可用于三元或任何类型的表达式 eval。

      警告:请在可以安全使用 eval 的场景中使用此代码。

      {{#if (myfunc "(a[0] + 1) % 2 === 0" arg1)}}
      
      {{/if}}
      
      {{#if (myfunc "(a[0] + a[1]) % 2 === 0" arg1 arg2)}}
      
      {{/if}}
      

      车把辅助功能

      myfunc: (exp, ...a) => {
          return eval(exp);
        } 
      

      【讨论】:

        【解决方案5】:

        这对我有用

        {{#if final}} "Final" {{^}} "Interim" {{/if}}
        

        【讨论】:

          猜你喜欢
          • 2022-01-24
          • 2021-10-06
          • 2013-04-19
          • 2012-06-02
          • 2019-10-08
          • 2012-02-06
          • 2013-02-06
          • 1970-01-01
          • 2013-12-19
          相关资源
          最近更新 更多