如何从组件中的sendAction方法获取返回状态

时间:2017-01-22 09:47:40

标签: javascript ember.js

我没有使用Ember Data(我不知道它是否解决了这个问题)。我有一个组件,然后单击该按钮将调用控制器内部定义的外部事件处理程序。我想知道sendAction方法的返回状态。有关详细信息,请参见下图。

enter image description here

  1. 在textarea中输入文字
  2. 点击" BTN SAVE"
  3. 处理index控制器
  4. 中的操作
  5. btnPressed actions obj
  6. 中执行ajax请求
  7. 我的问题如何从步骤(4)通知组件返回状态
  8. 一旦我知道请求状态,我就可以在我的组件中执行相应的操作。

    由于

2 个答案:

答案 0 :(得分:2)

如果您使用旧的操作处理机制(使用sendAction()),则无法从操作返回值,您需要的是关闭操作。使用闭包操作,您可以直接在组件中调用控制器中定义的操作,并从中获取返回值。 以下是使用闭包操作的示例。

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

在note-editor.hbs

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

然后在note-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

答案 1 :(得分: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是注入组件的服务。