我有一个应用程序路由,它在模型钩子中获取当前用户(并将其设置为模型)。如果应用程序控制器的模型为空(即用户未登录),我还有子路由应该转换到登录页面。在这些子路由中,我检查this.controllerFor('application')。get('model')是否为null。现在,如果用户实际登录,我会看到以下行为。首先,应用程序路由模型钩子工作并返回用户被检测到。然后,子路由将用户报告为null。然后,应用程序控制器中的观察者注意到更改为实际用户的模型。我的问题是:为什么在实际的父路由模型更改之前,子路由的beforeModel钩子工作会被传播到它的控制器。
如果我将检查放在子路径的setupController中,那么一切正常,但是如果路由重定向则触发其模型钩子事件,这根本不好。
访问modelFor('应用程序')也无法可靠地运行。
由于
答案 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);
}