是否有handlebars.js三元操作?(Is there a ternary operator

2019-06-26 23:16发布

在车把,是有一个三元运算符? 我不是说if else ; 我的意思是像a == true ? "a" : "b" a == true ? "a" : "b"

Answer 1:

你可以建立在handlbars了自己的助手,如果你真的想。 类似ternary(a==true, "a", "b") 有关更多信息,请参阅文档 。 从M90的想法是不是把手背后的理念。 我们的想法是没有在您的模板明确的代码,只调用助手和对象。



Answer 2:

if助手可以通过传递三个参数把它作为一个三元运算符。

在下面的例子中,按钮具有的默认值"Save Changes" ,但是当model.isSaving是真实的,那么这个值暂时更改为Saving...

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

......或者,用另一助手里:

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


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

具有两个参数:如果第一参数计算为真,将被打印,否则第二

{{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'}} 


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


文章来源: Is there a ternary operator in handlebars.js?