在父母的路线将其模型交给其控制器之前,Ember.js子路线在模型之前触发

时间:2015-01-02 18:20:16

标签: ember.js

我有一个应用程序路由,它在模型钩子中获取当前用户(并将其设置为模型)。如果应用程序控制器的模型为空(即用户未登录),我还有子路由应该转换到登录页面。在这些子路由中,我检查this.controllerFor('application')。get('model')是否为null。现在,如果用户实际登录,我会看到以下行为。首先,应用程序路由模型钩子工作并返回用户被检测到。然后,子路由将用户报告为null。然后,应用程序控制器中的观察者注意到更改为实际用户的模型。我的问题是:为什么在实际的父路由模型更改之前,子路由的beforeModel钩子工作会被传播到它的控制器。

如果我将检查放在子路径的setupController中,那么一切正常,但是如果路由重定向则触发其模型钩子事件,这根本不好。

访问modelFor('应用程序')也无法可靠地运行。

由于

1 个答案:

答案 0 :(得分:0)

问题是setupController(在控制器上设置模型)在所有子路由执行了它们的模型挂钩后触发。要在我使用的父路径中强制在控制器上设置模型:

setupController: function (controller, model) {
  // Skip default behavior, already done manually in the model hook
},

model: function () {
  // Set controller model as early as possible,
  // so child routes can rely on controllerFor('application')
  this.generateController('application').set('model', yourModelHere);
}