其中一个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
字段。
答案 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所需的全部内容)。