我有一个类似于这个堆栈溢出问题的问题,除了答案似乎不起作用。我有一个表单,用户在其中创建具有可变数量子模型的容器模块。提交表单时,我必须保存容器、子模型,并确保 hasMany 关系仍然存在。我的代码(使用 Ember-Cli):
容器:
var Container= DS.Model.extend({
name: DS.attr('string'),
submodels: DS.hasMany('submodel'),
lastModified: DS.attr('date')
});
export default Container;
子型号:
var Submodel= DS.Model.extend({
char: DS.belongsTo('container'),
name: DS.attr('string'),
desc: DS.attr('string'),
priority: DS.attr('number'),
effort: DS.attr('number'),
time: DS.attr('number')
});
export default Submodel;
ContainersNewRoute:
export default Ember.Route.extend({
model: function() {
return this.store.createRecord('container', {
...
});
}
});
ContainersNewController:
export default Ember.ObjectController.extend({
actions: {
addSubmodel: function() {
var submodels= this.get('model.submodels');
submodels.addObject(this.store.createRecord('submodel', {
...
}));
},
saveNewContainer: function () {
var container = this.get('model');
container.save().then(function(){
var promises = Ember.A();
container.get('submodels').forEach(function(item){
promises.push(item.save);
console.log(item);
});
Ember.RSVP.Promise.all(promises).then(function(resolvedPromises){
alert('all saved');
});
});
this.transitionToRoute(...);
}
}
});
Ember 数据本身工作正常,转换到创建的容器的视图,并列出了子模型。刷新页面,子模型从容器视图中消失。
我尝试了一些变体,例如使用 pushObject 而不是堆栈溢出答案中的 addObject 。我还尝试使用 Ember.RSVP 回调在保存子模型后第二次运行 container.save()。
经过一些进一步的测试,我发现子模型根本没有持久化。
有没有一种理智的方法来保存 1)容器 2)子模型 3)hasMany/belongsTo 相互关系?
或者这是否需要分解成离散的步骤,我保存容器,保存子模型,将子模型推送到容器以获取 hasMany 关系并重新保存容器,最后使子模型属于容器并保存又是子模型?