具有返回值的应用程序路由中的 ember 调用操作



在 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()必须变成什么才能做到这一点?

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

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

但是您将无法以这种方式获取applicationRouteAction函数的返回值。

将操作结果从父路由传达到子路由的两个最佳选项是:

  1. 通过转换到或刷新更新父路径的模型。这将更新路由树,子路由可以通过 modelFor 获取其父路由的模型。由于您在示例中使用的是应用程序路由,因此这似乎不是您想要使用的方法。

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

如果您可以添加有关您希望操作执行的操作的更多详细信息,我可以更新此答案,其中包含有关哪种模式更有意义以及原因的更多详细信息!

最新更新