2012-08-11 64 views
16

ハンドルバーには三項演算子がありますか?私はif elseを意味しません。私はa == true ? "a" : "b"のようになります。handlebars.jsに3項演算子がありますか?

+2

ハンドルバーだけではJavaScriptですので、三項演算子は、単にJavaScriptで同じように動作します。 – m90

+0

あなたは公式のウェブサイトをチェックしましたか:http://handlebarsjs.com/?それはチュートリアルが含まれています... –

+0

私は公式のWebサイトをチェックしました。しかし、私は3元Opreratorのexplaintionsを見ませんでした。 – shawnXiao

答えて

8

本当にしたい場合は、独自のヘルパーをビルドすることができます。 ternary(a==true, "a", "b")のようなものです。詳細については、documentationを参照してください。 m90のアイデアは、ハンドルバーの背後にあるアイデアではありません。このアイデアはテンプレートに明示的なコードを持たず、ヘルパーとオブジェクトだけを呼び出すことです。

+0

のようなhttp://stackoverflow.com/q/29441130/770127 – ryanve

9

ifヘルパーは、3つの引数を渡すことで3項演算子として使用できます。

次の例では、ボタンのデフォルト値は"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

+2

@majman私は最良の答えと思われるものを示すためのコードサンプルを追加しました。 – Andrew

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

2つのパラメータを使用すると、最初のパラメータがtrueと評価された場合は印刷され、それ以外の場合は2番目のパラメータ

三つのパラメータで10
{{iftrue project.price 'N/A'}} // $9.99 
{{iftrue project.priceNotAvailable 'N/A'}} // N/A 

:最初のパラメータがtrue第二に評価された場合には、印刷される、そうでなければ第3のコード以下

// 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

このリンクは質問に答えるかもしれませんが、答えの本質的な部分をここに含めて参考にしてください。リンクされたページが変更された場合、リンクのみの回答は無効になります。 - [レビューより](/レビュー/低品質の投稿/ 10731433) –

+1

@progressive_overload編集済み、thanx – Terion

0

これは、評価式の三元または任意の種類のために使用することができます。

警告: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); 
    } 
関連する問題