EmberJS 2.10如何正确设置嵌套路由控制器以设置路由上的操作?

时间:2017-01-24 09:56:30

标签: javascript ember.js

我对控制器路由器有点困惑。

我想创建一个名为" showModal"在路由上但是当我使用此代码时,ember会发送一个错误,指出该行为未在路线上定义:

export default Ember.Route.extend({


actions: {
    showModal: function (params) {
        console.info(params);
        if (params) {
            Custombox.open({
                target: '.mModal',
                closer: false
            });
        } else {
            Custombox.close();
        }
    }
  }
});

但是,如果我使用下一个代码似乎都可以正常工作,那么任何组件都可以调用模态操作:

export default Ember.Route.extend({
    setupController: function (controller, model) {
        this._super(...arguments);
        controller.set('actions', this.actions);
    },
    actions: {
        showModal: function (params) {
            console.info(params);
            if (params) {
                Custombox.open({
                    target: '.mModal',
                    closer: false
                });
            } else {
                Custombox.close();
            }
        }
    }
});

我想知道,如何为路线分配控制器?所以行动将在路线上正确定义。

顺便说一句,我使用下一个ember-cli命令来创建我的路线:ember g route new / quote

更新1:

添加了hbs代码

<div class=row>
      {{form-employee-search modal=(action "showModal")}}
 </div>

1 个答案:

答案 0 :(得分:0)

您可能将模板中的操作定义为闭包操作(使用(action'actionName')语法)。无法在需要在控制器上定义的路由上定义关闭操作。您可以在那里创建控制器并定义操作,也可以使用ember-route-action-helper来定义路由上的闭包操作。 https://github.com/DockYard/ember-route-action-helper

关于如何将控制器分配给路线的问题,您只需要创建与路径路径相同的控制器。来自guide

  

my-controller-name的值必须与呈现它的Route的名称相匹配。因此,名为blog-post的路由将具有名为blog-post的匹配控制器。

     

如果要自定义其属性或提供任何操作,则只需生成Controller。如果您没有自定义,Ember将在运行时为您提供Controller实例。