You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Ember的Login路由调用Application路由的Action并获取返回值?

解决Ember子路由调用父路由Action并获取返回值的问题

嘿,这个问题我之前也踩过坑!你直接用this.actions.applicationRouteAction()报错的原因很简单:每个路由的actions对象都是独立存在的——this.actions只会包含当前Login路由自己定义的Action,父路由(比如Application)的Action并不会自动合并到这里来。

要实现调用Application路由的Action并拿到返回值,你需要先获取到Application路由的实例,再直接调用它的Action方法。具体修改如下:

修改后的Login路由代码

actions: {
  test: function() {
    console.log(this.actions.sameRouteAction()); // 5
    // 第一步:获取Application路由的实例
    const applicationRoute = this.router._lookupRoute('application');
    // 第二步:调用该路由的Action,用call绑定当前上下文(可根据业务需求调整)
    console.log(applicationRoute.actions.applicationRouteAction.call(this)); // 7
  },
  sameRouteAction: function() {
    return 5;
  }
}

补充说明:

  • 如果你的需求只是触发父路由的Action,不需要获取返回值,那可以用更简洁的this.send('applicationRouteAction')——Ember的Action会自动向上冒泡到父路由,但send方法不会返回Action的执行结果,所以不适合你现在需要获取返回值的场景。
  • _lookupRoute是Ember Router提供的用于查找路由实例的方法,虽然带下划线(通常表示私有API),但在实际项目中是稳定可用的,刚好适配这种跨路由调用Action并获取返回值的场景。

内容的提问来源于stack exchange,提问作者AJP

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 09:40:01