Ember 应用程序中的父路由从服务器加载模型。该模型是一个包含一系列字段的数组,其中一个字段本身就是一个包含子路由模型的数组。模型数组在父路由中显示为列表,其中每个项目在单击时链接到子路由,同时将所选模型传递给子路由。
但是,由于子路由不会从服务器加载其模型,而是从父路由接收模型,因此在子路由上刷新页面(或共享 URL)会产生错误。解决这个问题的好方法是什么?
这是一个带有示例的 JSBin。
Ember 应用程序中的父路由从服务器加载模型。该模型是一个包含一系列字段的数组,其中一个字段本身就是一个包含子路由模型的数组。模型数组在父路由中显示为列表,其中每个项目在单击时链接到子路由,同时将所选模型传递给子路由。
但是,由于子路由不会从服务器加载其模型,而是从父路由接收模型,因此在子路由上刷新页面(或共享 URL)会产生错误。解决这个问题的好方法是什么?
这是一个带有示例的 JSBin。
你应该在你的子路由中实现模型钩子,并且当你使用 ember 数据时,使用fixtureAdapter 和 store。
稍作修改的 JSBin http://jsbin.com/oSUZUvE/2#/documents/1/subdocument/2
App = Ember.Application.create({});
App.ApplicationAdapter = DS.FixtureAdapter;
App.Router.map(function() {
this.resource('documents', function(){
this.resource('document', {path: ':document_id'}, function () {
this.resource('subdocument', {path: 'subdocument/:subdocument_id'});
});
});
});
App.ApplicationRoute = Ember.Route.extend({
redirect: function () {
this.transitionTo('documents');
}
});
App.DocumentsRoute = Ember.Route.extend({
model: function(){
return this.get('store').find('document');
}
});
App.DocumentRoute = Ember.Route.extend({
model: function (params) {
console.log(params);
return this.get('store').find('document',params.document_id);
}
});
App.SubdocumentRoute = Ember.Route.extend({
model: function (params) {
console.log(params);
return this.get('store').find('subdocument',params.subdocument_id);
}
});