2012-08-11 72 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); 
    }