我没有使用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
是注入组件的服务。