在 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
函数的返回值。
将操作结果从父路由传达到子路由的两个最佳选项是:
通过转换到或刷新更新父路径的模型。这将更新路由树,子路由可以通过 modelFor 获取其父路由的模型。由于您在示例中使用的是应用程序路由,因此这似乎不是您想要使用的方法。
创建或使用现有服务在路由之间进行通信。可以在两个位置注入服务,从应用程序路由更新其状态,并从子路由读取其状态。
如果您可以添加有关您希望操作执行的操作的更多详细信息,我可以更新此答案,其中包含有关哪种模式更有意义以及原因的更多详细信息!