在Ember中将XHR初始会话状态设置为服务器

时间:2015-05-18 14:36:52

标签: ember.js ember-cli

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

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

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

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

2 个答案:

答案 0 :(得分:1)

application路由的beforeModel挂钩中执行此操作。确保检查会话/用户状态的调用返回RSVP.promise并在beforeModel挂钩中返回此承诺。 Ember提供了保证,执行将阻止,直到此承诺解决/拒绝。因此,将失败/缺少会话重定向到您的auth路由或任何有意义的行为,或让执行继续。 application路由是应用程序的基本路由,每次刷新应用程序时都会输入,包括应用程序的初始加载。每次子路由更改时,application路由都不会重新进入,并且不会调用此挂接。但是如果你在子路由并点击刷新,则会输入application路由并执行所有挂钩。根据您的需要,您可能还需要在子路由的beforeModel挂钩中执行代码。如果是这样,请使用mixin或使所有子路由从处理此功能的公共基础route扩展

答案 1 :(得分:1)

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

这样,应用程序将不会继续启动,直到xhr调用完成。

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