我对控制器路由器有点困惑。
我想创建一个名为" 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>
答案 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实例。