EmberJS:如何从控制器发送动作?

时间:2014-07-03 22:30:24

标签: javascript ember.js

我有一个模态对话框,其实现类似于食谱中描述的内容:http://emberjs.com/guides/cookbook/user_interface_and_interaction/using_modal_dialogs/

我可以通过模板中的事件关闭模态而不会出现任何问题。但是,我已经为特定模态实现了一个控制器,它使用通过模态输入的数据创建一个新模型。现在我想在模型(控制器完成之后)创建后关闭对话框。我尝试了各种方法从控制器向模态发送动作,但到目前为止没有任何工作。所以,有两个问题:

  • 如何在控制器中的操作完成后关闭模态?

    export default ModalController.extend({
      actions: {
        create: function() {
        // do some stuff
        var newModel = this.store.createRecord('newModel', {
            name: name
        });
        newModel.save()
        // close modal
        // ... but how?
    }
    
  • 由于这依赖于承诺,我认为这会在创建承诺后关闭模式。当服务器的实际响应到达并且一切正常时,如何关闭模式?

1 个答案:

答案 0 :(得分:1)

假设您正在为模型使用Ember Data:

export default ModalController.extend({
  actions: {
    create: function() {
    // do some stuff
    var newModel = this.store.createRecord('newModel', {
        name: name
    });
    newModel.save().then(function success() {
        //success message and close modal
    }).catch(function failure() {
        //error message and close modal
    });
}

这里的基本想法是为success注册failureModel.save()个回调, 并关闭那些回调中的模态对话框。

关于如何实际关闭模态对话框,假设你已经实现了 同一closeModal的操作哈希中的Controller, 您需要通过this.send()

按名称调用操作
    newModel.save().then(function success() {
        //success message and close modal
        this.send('closeModal');
    }.bind(this)) /* ... */

请务必在回调函数上调用.bind(),以便this指向您期望的内容(控制器)。 我记得asking a question about just this a while back

HTH!