应用程序路径中的Ember调用操作,返回值

时间:2018-05-14 14:15:28

标签: ember.js

在Ember中,您可以使用this.actions.actionName()在正常功能中调用当前上下文中的操作。这意味着该操作可以返回一个值。

在我的登录路线中,我试图以这种方式从应用程序路径调用一个动作。但是this.actions仅包含我的登录路由中的操作。

登录路线

actions: {
  test: function() {
    console.log(this.actions.sameRouteAction()); //5
    console.log(this.actions.applicationRouteAction()); // this.actions.applicationRouteAction() is not a function.
  },
  
  sameRouteAction: function() {
    return 5;
  }
}

申请路线

actions: {
  applicationRouteAction: function() {
    return 7;
  }
}

this.actions.applicationRouteAction()必须成为什么才能使其发挥作用?

1 个答案:

答案 0 :(得分:2)

从Ember 3.1.0开始,没有办法可以直接在父路由上调用动作作为普通函数,就像在当前路由/类的上下文中一样。您可以使用send功能向上发送操作:

actions: {
  test: function() {
    this.send('applicationRouteAction');
  },
}

但是你不能以这种方式获得applicationRouteAction函数的返回值。

将行动结果从父路线传递到子路线的两个最佳选项是:

  1. 通过transitionTorefresh更新父路线的模型。这将更新路径树,您的子路径可以通过modelFor获取其父路径的模型。由于您在示例中使用的是Application路由,这似乎可能不是您想要使用的方法。

  2. 创建或使用现有的Service在路由之间进行通信。您可以在两个位置注入服务,从Application路由更新其状态,并从子路径读取其状态。

  3. 如果您可以添加有关您希望操作的更多详细信息,我可以更新此答案,并提供有关哪种模式更有意义以及原因的详细信息!