【问题标题】:EmberJS: how to send an action from a controller?EmberJS:如何从控制器发送动作?
【发布时间】:2014-08-25 04:46:06
【问题描述】:

我有一个模态对话框,其实现类似于食谱中描述的内容: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?
    }
    
  • 由于这依赖于承诺,我认为这将在创建承诺后关闭模式。当服务器的实际响应到达并且一切正常时,如何关闭模式?

【问题讨论】:

  • 假设您已经有一个closeModal 操作用于用户何时关闭模态,要关闭模态,您可以使用Em.TargetActionSupport mixin 的triggerAction() 方法来设置action: 'closeModal', target: this 或类似的东西使用方法 bguiz 建议的行。 More info here.

标签: javascript ember.js


【解决方案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
    });
}

这里的基本思想是为Model.save()注册successfailure回调, 并在这些回调中关闭模式对话框。

至于如何真正关闭模态对话框,假设你有实现 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!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多