2012-08-11 245 views
16

在把手中,是否有三元操作符?我不是指if else;我的意思是像a == true ? "a" : "b"在handlebars.js中有三元运算符吗?

+2

把手只是JavaScript,因此三元运算符将工作就像在JavaScript中。 – m90 2012-08-11 15:26:41

+0

您是否检查过官方网站:http://handlebarsjs.com/?它包含教程... – 2012-08-11 16:10:41

+0

我检查了官方网站。但我没有看到三元运算器的解释。 – shawnXiao 2012-08-12 08:37:30

回答

8

你可以建立在handlbars了自己的助手,如果你真的想。像ternary(a==true, "a", "b")。欲了解更多信息,请参阅documentation。从m90的想法不是手柄背后的想法。这个想法是在你的模板中没有显式的代码,只需要调用助手和对象。

+0

像http://stackoverflow.com/q/29441130/770127 – ryanve 2015-04-06 18:44:14

9

if助手可以通过传递三个参数传递给它被用作三元运算符。

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

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

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

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

你能详细说明还是指向例子? – majman 2015-12-21 16:15:05

+2

@majman我已经添加了一个代码示例来演示我相信是最好的答案。 – Andrew 2016-04-19 23:05:06

1

我对这个(注意,其他助手也可以内部使用) 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'}} 
+0

虽然这个链接可能回答这个问题,但最好在这里包含答案的基本部分,并提供参考链接。如果链接页面更改,则仅链接答案可能会失效。 - [来自评论](/ review/low-quality-posts/10731433) – 2015-12-30 22:05:43

+1

@progressive_overload编辑,thanx – Terion 2015-12-30 22:59:17

0

这下面的代码可以用于三元或任何种类的表达的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); 
    }