在模型钩子

时间:2015-05-28 21:57:14

标签: javascript ember.js ember-data

我的路线结构如下:

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

0 个答案:

没有答案