我沒有使用Ember Data(我不知道它是否解決了問題)。我有一個組件,然後單擊該按鈕將調用控制器內定義的外部事件處理程序。我想知道sendAction
方法的返回狀態。詳情請參閱下圖。如何從組件中的sendAction方法獲取返回狀態
- 在textarea的
- 點擊 「BTN SAVE」
- 手柄行動
index
控制器輸入文字 - 在
btnPressed
行動OBJ - 我的問題執行Ajax請求,如何通知組件從步驟(4) 01返回的狀態
一旦我知道請求狀態,我可以在組件中執行相應的動作。
感謝
我沒有使用Ember Data(我不知道它是否解決了問題)。我有一個組件,然後單擊該按鈕將調用控制器內定義的外部事件處理程序。我想知道sendAction
方法的返回狀態。詳情請參閱下圖。如何從組件中的sendAction方法獲取返回狀態
index
控制器輸入文字btnPressed
行動OBJ一旦我知道請求狀態,我可以在組件中執行相應的動作。
感謝
如果您使用舊的動作處理機制(使用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
閱讀後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
是注入組件的服務。