Неотловленная #‹ошибка› при загрузке приборов

Я делаю что-то не так с приборами. У меня есть модели, в которых в контракте много элементов контракта, и я пытаюсь загрузить для них приспособления.

App.Contract = DS.Model.extend({
  contractItems: DS.hasMany('contractItem'),
  //
});

App.ContractItem = DS.Model.extend({
  contract:       DS.belongsTo('contract'),
  //
});

App.Contract.FIXTURES = [{
  id:             1,
  runtime:        12,
  //
  contractItems:  [1, 2]
},{
  id:        2,
  //
}];

App.ContractItem.FIXTURES = [{
  id:             1,
  //
  },{
  id:             2,
  //
  }];

Я закомментировал некоторые скучные атрибуты, но полный файл находится здесь. При загрузке страницы получаю ошибку

Uncaught #<error> VM1615:956
ProfileManager.ended VM1615:956
Ember.subscribe.after VM1615:2007
finalizer ember-1.5.1.js:1802
Ember.tryCatchFinally ember-1.5.1.js:1554
Ember.Instrumentation.instrument ember-1.5.1.js:1810
Ember.CoreView.Ember.Object.extend.renderToBuffer ember-1.5.1.js:22472
Ember.View.Ember.CoreView.extend.createElement ember-1.5.1.js:23993
Ember.merge.insertElement ember-1.5.1.js:24944
Ember.View.Ember.CoreView.extend._insertElement ember-1.5.1.js:23921
DeferredActionQueues.flush ember-1.5.1.js:6125
Backburner.end ember-1.5.1.js:6215
Backburner.run ember-1.5.1.js:6254
executeTimers ember-1.5.1.js:6552
(anonymous function)

Удаление строки contractItems: [1, 2] решает эту проблему, но очевидно, что связанные объекты тогда не загружаются. Я думал, что я сделал что-то не так с верблюжьей оболочкой и пробовал разные версии, но безуспешно.

Ember используется в версии 1.5.1, Ember-Data в версии 1.0.0-beta9.

Любые подсказки приветствуются...


person Informatom    schedule 04.06.2014    source источник


Ответы (1)


Ваши отношения должны быть определены как асинхронные, поскольку они не загружаются в ту же полезную нагрузку, что и загружаемая вами запись.

App.Contract = DS.Model.extend({
  contractItems: DS.hasMany('contractItem', {async:true}),
  //
});

App.ContractItem = DS.Model.extend({
  contract:       DS.belongsTo('contract', {async:true}),
  //
});

Помните, что при доступе к асинхронным свойствам использовать затем

contract.get('contractItems').then(function(items){
  console.log(items.get('length'));
});
person Kingpin2k    schedule 04.06.2014