2016-07-22 6 views
0

私はemberを使用するプロジェクトに取り組んでいます。条件付きロジックは、HTMLテンプレート、コントローラー、および関数が定義されている場所に置くことができます。私はグローバル変数が真であるときに起動する必要があるアクションを持っています。条件付きアクションロジックはどこに行くべきですか?

<div {{action 'CallThisAction' on='click'}}>...</div> 

.hbsでは私が行うことができます

{{#if global.x}} 
    <div {{action 'CallThisAction' on='click'}}>...</div> 
{{else}} 
    <div>...</div> 
{{/if}} 

または機能の

私はでき

CallThisAction(){ 
if(global.x){ 
    //do something 
    } 
} 

または私は偏った呼び出されてからCallThisActionを防ぐために、コントローラにロジックを追加することができますglobal.xをオフにします。コントローラも減価償却されます。

私はまたのparamとして渡すことができます。

CallThisAction(x){ 
if(x){ 
    //do something 
    } 
} 

これを行うにはクリーンな方法はありますか?理想的にはここでの解決策はいいでしょう:Feature Request

答えて

1

あなたのテンプレートはグローバル変数を使うべきではありません。あなたの行動にそのようなロジックを保存する方が良いです:

actions: { 
    CallThisAction(){ 
    if(!global || !global.x){ 
     return; 
    } 
    // do something 
    } 
} 
+0

回答を回答しています。なぜ、あなたは理由を教えてくれますか? – ajputnam

+0

テンプレートには、必要なロジックのみを格納する必要があります。コントローラレイヤではないビューレイヤです。テンプレートとコンポーネントはできるだけシンプルにする必要があります。行動をどうするかについてのあなたの論理は、コントローラに保存する必要があります。 global.xが設定されていないときに別のHTMLをテンプレートに表示する必要はないが、global.xが設定されている場合にアクションを実行したい場合は、global.x checkをcontrollerに移動してテンプレートを単純にする方がよい。 –

+0

恐ろしい!それは理にかなっている。 – ajputnam