我正在尝试使用嵌套路由首先渲染集合。渲染集合后,单击某个项目(使用link-to)会在插座中呈现该特定项目。到目前为止一切正常。
我遇到的问题是刷新页面不会调用嵌套资源的“模型”钩子。
来自Ember的网站http://emberjs.com/guides/routing/specifying-a-routes-model/:
如果用户直接使用网址访问您的应用,会发生什么情况 包含动态细分?例如,他们可能会重新加载 页面,或将链接发送给点击它的朋友。在那时候, 因为我们是从头开始应用程序,实际的 要显示的JavaScript模型对象已丢失;我们只有 来自网址的ID。
幸运的是,Ember将为您提取URL中的所有动态细分 并将它们作为哈希传递给模型钩子作为第一个参数
这是我的代码:
Admin.Workqueues.App.Router.map(function () {
this.resource('delinquencies', function () {
this.resource('delinquency', {
path: '/:id'
});
});
});
Admin.Workqueues.App.DelinquenciesRoute = Ember.Route.extend({
model: function () {
// Does XHR here and fetches a collection of items to render.
// Returns a promise
}
});
Admin.Workqueues.App.DelinquencyRoute = Ember.Route.extend({
model: function (params) {
debugger; // This doesn't get called
}
});
因此,使用此代码,转到 / delinquencies 会列出整个集合。点击某个项目会在 / delinquencies / 3 打开一个拖欠对象,但现在刷新该页面并不会调用拖欠路由的模型挂钩。
我不确定我错过了什么。有任何想法吗?如果重要,我正在使用:
Ember:1.2.0
Ember数据:1.0.0-beta.7 + canary.f482da04
把手:1.1.1
答案 0 :(得分:2)
您不应将资源定义为子资源,而应将其定义为单独的资源。
Admin.Workqueues.App.Router.map(function () {
this.resource('delinquencies', function () {});
this.resource('delinquency', { path: '/:delinquency_id' });
});
您的代码现在正常工作的原因是因为链接到帮助程序已经提供了上下文,因此模型挂钩永远不会被调用。
对于DelinquencyRoute中的模型钩子,您应该使用以下内容:
return this.store.find('delinquency', params.delinquency_id);
有关详细信息,请查看指南和入门教程: http://emberjs.com/guides/routing/defining-your-routes/(动态细分部分回答您的问题)