Ember Data 1.0.x在双向关联时无法保存hasMany关系。

3

其中一个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();
},

当我点击测试2操作时,控制台会首先显示该提交中有1个选择,然后是第二个。 save()方法触发了一个 post 请求,但它缺少了 selections 对象:

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

我尝试过删除和添加反向映射。奇怪的是其他的 hasMany 关系都能正常工作。
我发现唯一有效的方法是从 Selection 中删除 submission 字段。
2个回答

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)。


0

我有同样的问题。我尝试删除DS.belongTo语句,但没有效果。我使用模型的“save”函数来触发向服务器发送消息。我想知道是否有其他触发方式可能会导致向服务器发送不同消息(包含hasMany记录)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接