当双向时,ember数据1.0.x没有保存hasMany关系

时间:2013-10-31 21:24:01

标签: ember.js ember-data

其中一个hasMany关系不是POST回服务器。你是如何建模双向关系的呢?

以下是相关对象:

Encompass.Selection = DS.Model.extend({
  text: DS.attr('string'),
  submission: DS.belongsTo('submission', {inverse: 'selections'}),
});

Encompass.Submission = DS.Model.extend({
  shortAnswer: DS.attr('string'),
  selections: DS.hasMany('selection'),
  testing: DS.hasMany('folder'),
  workspaces: DS.hasMany('workspace'),
});

和控制器操作:

testing2: function() {
  var submission = this.get('model');
  console.log(submission.get('selections.length'));
  var newSelection = this.get('store').createRecord('selection', {
    text: 'testing2 selection' + new Date().getMilliseconds(),
    submission: submission,
    coordinates: 'bogus coords',
    workspace: this.get('currentWorkspace')
  });
  //newSelection.save();
  console.log(submission.get('selections.length'));
  submission.save();
},

当我点击testing2操作时,控制台显示提交首先有1个选择,然后是第二个。 save()方法会触发帖子,但它缺少选择对象:

  {
    submission: {
      shortAnswer: "short", 
      testing:     [],
      workspaces:  ["5271d0147205f15e31000001"]
    }
  }

我尝试删除并添加逆映射。奇怪的部分是另一个有很多关系的工作。

我发现唯一可行的方法是从submission删除Selection字段。

2 个答案:

答案 0 :(得分:0)

我遇到了同样的问题。我尝试删除DS.belongTo语句没有任何效果。我使用模型的“保存”功能来触发服务器的消息。我想知道是否有另一种触发方式可能导致不同的消息(带有hasMany记录)被发送到服务器。

答案 1 :(得分:0)

以下是hasMany未被发回的情况之一。

我们有时会看到从save()操作序列化的json不包含我们刚刚设置的数据,这真的令人费解。

selection.set('workspace', workspace)
selection.save()

json可能看起来像:

{ 
 id: 02314892038,
 workspace: undefined,
 isTrashed: false
}

正在设置工作区,现在不是。有承诺设置它,我们应该等待它,如果后端需要它。

selection.set('workspace', workspace);
selection.get('workspace').then(function(){
  selection.save();
});

基本上你可能会看到非确定性行为:

  • 适用于此方法/为何不在此
  • 为我工作
  • 曾经工作

这不仅适用于一组之后的保存。我已经看过从早些时候加载数据的情况,但出于某种原因,这种关系还没有完成。

我不确定为什么这不能为未完成的关系序列化ID(我们总是知道ID以及我们对JSON所需的全部内容)。