级联删除模型及其与emberjs的belongsTo关系

时间:2015-01-26 23:03:13

标签: ember.js ember-data firebase emberfire

我有一个我正在构建的emberjs / ember-data / firebase / emberfire客户端应用程序。 Ember : 1.11.0-beta.1+canary.d2d1490d Ember Data : 1.0.0-beta.14.1 EmberFire : 1.3.2 jQuery : 1.11.2

我在ember-data模型中声明了双向关系

widget model belongsTo customer

customer hasMany widgets

使用addObject()

从客户控制器创建相关小部件可以正常工作
  // add widget
  var widget = this.store.createRecord('widget', {
    name: data.name.trim(),
    _time: new Date().getTime(),
    customer: model,
  });

  // save and add to model
  widget.save().then(function(widget){
    model.get('widgets').addObject(widget);
    model.save();
  });

对FB和UI中的数据进行审核看起来不错。

所以,现在要从小部件视图控制器中实际删除小部件(不要将其与客户取消链接),我还想将删除级联到拥有此小部件的客户。我理解这应该是自动的,在模型中使用正确的hasMany / belongsTo设置,但它失败了。我认为这个问题是个问题,但在我报告错误之前,有人可以检查一下吗?

如果我在WidgetsViewController中使用destroyRecord(),则移除小部件,但不会向客户级联..也没有错误。

Some research建议使用

model.deleteRecord();
this.store.dematerializeRecord(model);

...也许是因为这不会持久删除,没有错误。但是当你添加model.save()来提交删除时,Firebase错误:

FIREBASE WARNING: Exception was thrown by user callback. TypeError: Cannot read property 'get' of null
at DS.FirebaseAdapter.DS.Adapter.extend._handleChildValue (http://0.0.0.0:4200/assets/vendor.js:80787:20)

该代码显示:

_handleChildValue: function(store, type, serializer, snapshot) {
  //No idea why we need this, we are alredy turning off the callback by
  //calling ref.off in recordWillUnload. Something is fishy here
  if (store.isDestroying) {
    return;
  }
  var value = snapshot.val();
  if (value === null) {
    var id = this._getKey(snapshot);
    var record = store.getById(type, id);
    //TODO refactor using ED
    if (!record.get('isDeleted')) {
      record.deleteRecord();
    }
  } else {
      ...
  }
}

因此,任何人都可以了解firebase开发人员是否认为这不是必需的原因,或者是否存在并且其未实现? ..或者或许指向另一个有效的方向?

----------更新添加的模型关系---------------

// customer model
import DS from 'ember-data';
export default DS.Model.extend({
  name:  DS.attr('string', { async:true }),
  widgets: DS.hasMany('widget', { async:true }),
  _time: DS.attr('number', { async:true }),
});

// widget model
import DS from 'ember-data';
export default DS.Model.extend({
  name: DS.attr('string', { async:true }),
  _time: DS.attr('number', { async:true }),
  customer: DS.belongsTo('customer', { async:true })
});

0 个答案:

没有答案