在 Ember 中将初始会话状态 XHR 发送到服务器的位置

Where in Ember to make initial session status XHR to server

当我的 ember 应用程序启动时,我需要调用服务器以检查当前 session/user 状态。这需要在任何模型挂钩 运行 或呈现任何模板之前发生。

这应该发生在哪里?我找不到完全正确的地方 -- 它让 运行ning 有点太晚了,或者根本没有。现在我在我的应用程序路由初始化中使用 this._super.apply(),它工作正常但它在子路由模型挂钩后 运行s。

我认为它应该是一个初始化程序,但 ember-cli 文档明确指出初始化程序不应包含 XHR(它在生成器部分说明了这一点)。

我本质上是在问在哪里发出这个问题的答案中提到的服务器请求:How and when to use Ember.Application register and inject methods?

在您的 application 路线的 beforeModel 挂钩中执行此操作。确保检查 session/user 状态 return 的调用是 RSVP.promise 和 return beforeModel 挂钩中的此承诺。 Ember 保证执行将阻塞直到这个承诺 resolves/rejects。因此,将会话的 failure/lack 重定向到您的 auth 路由或任何有意义的内容,或者让执行按原样继续。 application 路由是应用程序的基本路由,每次刷新应用程序时都会输入,包括应用程序的初始加载。每次子路由更改时,不会重新进入 application 路由,也不会调用此挂钩。但是,如果您在子路径中并点击刷新,将进入 application 路径并执行所有挂钩。根据您的需要,您可能还需要在子路径的 beforeModel 挂钩中执行代码。如果是这样,请使用 mixin 或使所有子路由都从处理此功能的公共基础 route 扩展

创建 ember 应用程序后,您可以调用 deferReadiness() 方法,然后进行 xhr 调用,成功后调用 advanceReadiness()

这样,在您的 xhr 调用完成之前,应用程序将不会继续启动。

您可以在文档中查看更多信息 - http://emberjs.com/api/classes/Ember.Application.html#method_deferReadiness