我的路线结构如下:
this.route('brands', function() {
this.route('brand', { path: ':brand_id' }, function() {
this.route('items', function() {
this.route('item', { path: ':item_id' });
});
});
});
在我的items
路线中,我有以下模型钩子:
var brand = this.modelFor('brands.brand');
return brand.get('items');
当我从品牌路线开始并导航到物品路线然后返回物品页面时,一切都很好。但是,当我在项目路线上刷新并导航回项目路线时,会抛出Error while processing route: brands.brand.items.index
。
Ember并没有真正帮助我们提供有意义的错误消息。我所能看到的是一些神秘的被拒绝的承诺,如:
Router: 'application.brands.brands.brand.brands.brand.items.brands.brand.items.index': Resolve handler
。
我将其追溯到这三种可能的解决方案
1)在items
上使用以下模型钩子:
let brand = this.modelFor('brands.brand')
return this.store.find('item', { brand: brand.id });
2)在brand
模型上注释掉item
关系。
3)移动文件品牌/品牌/项目/索引/路线.js'到'品牌/品牌/项目/ route.js'。 更新:不能工作。
我使用Ember 1.12.0和Ember Data 1.0.0-beta.16.1。
代码
// routes.js
this.route('brands', function() {
this.route('brand', { path: ':brand_id' }, function() {
this.route('items', function() {
this.route('item', { path: ':item_id' });
});
});
});
// pods/brands/index/route.js
Ember.Route.extend({
model: function(params) {
return this.store.find('brand');
}
})
// pods/brands/brand/route.js
Ember.Route.extend({
model: function(params) {
return this.store.find('brand', params.brand_id);
}
});
// pods/brands/brand/items/index/route.js
Ember.Route.extend({
model: function(params) {
var brand = this.modelFor('brands.brand');
return brand.get('items');
}
});
// pods/brands/brand/items/item/route.js
Ember.Route.extend({
model: function(params) {
return this.store.find('item', params.question_id);
}
});
// models/brand.js
DS.Model.extend({
//...
items: DS.hasMany('item', { async: true })
});
// models/item.js
DS.Model.extend({
//...
brand: DS.belongsTo('brand', { async: true })
});
错误
Error while processing route: brands.brand.items.index
logError @ ember.debug.js:23713
defaultActionHandlers.error @ ember.debug.js:23656
triggerEvent @ ember.debug.js:23769
trigger @ ember.debug.js:44997
Transition.trigger @ ember.debug.js:44822
(anonymous function) @ ember.debug.js:44627
tryCatch @ ember.debug.js:45439
invokeCallback @ ember.debug.js:45451
publish @ ember.debug.js:45422
publishRejection @ ember.debug.js:45364
(anonymous function) @ ember.debug.js:26472
Queue.invoke @ ember.debug.js:878
Queue.flush @ ember.debug.js:943
DeferredActionQueues.flush @ ember.debug.js:748
Backburner.end @ ember.debug.js:173
Backburner.run @ ember.debug.js:228
Backburner.join @ ember.debug.js:247
run.join @ ember.debug.js:15904
exports.default.EmberObject.default.extend._bubbleEvent @ ember.debug.js:36760
(anonymous function) @ ember.debug.js:36710
jQuery.event.dispatch @ jquery.js:4670
jQuery.event.add.elemData.handle @ jquery.js:4338