2017-01-22 21 views
0

私はEmber Dataを使用していません(問題が解決するかどうかはわかりません)。コンポーネントがあり、ボタンをクリックすると、コントローラの内部で定義された外部イベントハンドラが呼び出されます。私はsendActionメソッドからの戻り状態を知りたいです。詳細は下の画像を参照してください。コンポーネント内のsendActionメソッドから戻り状態を取得する方法

enter image description here

  1. テキストを入力するテキストエリアに
  2. クリックindexコントローラ
  3. で "BTN SAVE"
  4. ハンドルアクションはOBJ btnPressedアクションで
  5. をAJAXリクエストを実行する私の質問どのようにステップ(4)からの復帰状態をコンポーネントに通知する

私がリクエスト状態を知ったら、自分のコンポーネントで対応するアクションを実行できます。

おかげ

答えて

1

古いアクション処理メカニズム(sendAction()を使用)を使用している場合、アクションから戻り値を取得することはできません。必要なのはクロージャーアクションです。クロージャーアクションを使用すると、コントローラーで定義されたアクションをコンポーネントで直接呼び出すことができ、そこから戻り値を取得できます。 ここでは、クロージャーアクションを使用した例を示します。

index.hbs 
{{note-editor btnPressed=(action 'btnPressed')}} 
ノートeditor.hbs

<button onclick={{action 'actionBtnPressed'}}>Save</button> 

そして、ボタンがクリックされたときにノートeditor.jsにあなたはbtnPressedを呼び出すことができます。

actionBtnPressed() { 
    let val = this.btnPressed(); 
    // val is value returned from controller's btnPressed action 
} 

ここではクロージャーアクションについて詳しく読むことができます。 https://github.com/emberjs/rfcs/blob/master/text/0050-improved-actions.md

0

ポストCorrect way to make an ajax call from EmberJs component?を読んだ後、私はこの問題を解決するためにコンポーネントに、コントローラ内部AJAXコードを移動します。

actionBtnPressed() { 
     const card = { 
      front: this.get('cardFront'), 
      back: this.get('cardBack'), 
      tags: this.get('tags') 
     }; 

     if (this._validateCardFront()) { 
      this.get('ajax').createCard(card) 
       .done((data) => { 
        this._cleanInputs(); 
       }) 
       .fail((err) => { 
       }); 
     } 
    } 

ajaxは、コンポーネントに注入されるサービスです。

関連する問題