【问题标题】:EmberJS 2.10 How to properly set nested route controller to set actions on the route?EmberJS 2.10 如何正确设置嵌套路由控制器以设置路由上的操作?
【发布时间】:2017-06-09 01:40:03
【问题描述】:

我对分配给路由的控制器有点困惑。

我想在路由上创建一个名为“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>

【问题讨论】:

  • 如果你使用闭包动作,它们不能只在控制器上的路由上定义。
  • 想法是组件执行一个动作,然后调用路由动作,第二个代码执行功能
  • 你能把你的模板粘贴到你调用组件的地方吗?
  • 是的,你的动作被定义为闭包动作,这很好,唯一的问题是它们需要在控制器中定义,或者使用我发布的答案中的帮助器,然后你可以在路由中定义它们。跨度>

标签: javascript ember.js


【解决方案1】:

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

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

my-controller-name 的值必须与渲染它的 Route 的名称匹配。因此,名为 blog-post 的 Route 将有一个名为 blog-post 的匹配控制器。

如果您想自定义其属性或提供任何操作,您只需要生成一个控制器。如果您没有自定义,Ember 会在运行时为您提供一个 Controller 实例。

【讨论】:

  • 如何创建控制器并将其分配给路由?
  • 使用 ember g 控制器并提供与您的路线相同的路径 - ember g 控制器新/报价
  • 好的,让我试试,我会告诉你是否可行,但我很确定我已经尝试过了,但还是不行。
  • 创建控制器,将动作哈希从路由移动到控制器,删除 setupController,它应该可以工作。
  • 对不起,大楼停电,我会尽快尝试您的解决方案,我会通知您
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-18
  • 1970-01-01
相关资源
最近更新 更多