我有两个模型通过belongsTo
(互惠关系,即1:1)相互关联,利用async
属性。检索到一条记录并将其设置为路由器上的Model后,我可以访问主记录中的属性及其关联 - 一切正常。我使用输入助手将属性绑定到input
和textarea
元素,以便用户可以对模型进行更改,包括关联记录的属性。但是,当我运行save()
函数时,Ember只对主记录发出PUT
请求,而不是对相关记录发出请求,即使它是更改的记录。
Entry.js(型号)
export default DS.Model.extend({
// Properties
entry: DS.attr('Number'),
...
// Relational properties
definition: DS.belongsTo('definition', {async: true}),
...
});
Definition.js(Model)
export default DS.Model.extend({
// Properties
blocks: DS.attr(),
...
// Relational properties
entry: DS.belongsTo('entry', {async: true}),
...
});
Route.js
export default Ember.Route.extend({
model: function(params){
return this.store.find('Entry', params.entry_id);
},
actions: {
saveDef: function(){
// console.log('Saving . . .');
var entry = this.controller.get('content');
entry.save().then(function(){
// console.log('Saved Success');
}, function(err){
// console.log(err);
});
}
}
});
提前致谢。
答案 0 :(得分:2)
在Ember保存模型时,其他型号不会被保存。 您需要自己保存每个模型。我建议你为每个模型创建一个单独的视图并单独保存,因为你可能会遇到一致性问题。
无论如何,这里是你如何保存两个模型的。
var model = this.controller.get('content');
model.save();
var definition = model.get('definition');
if( definition && definition.then ) {
definition.then(function(definition) { definition.save(); });
} else if( definition ) {
definition.save();
}
<强>更新强>
此处的问题是未加载定义。因此,当您致电model.get('definition')
时,Ember将需要从服务器获取模型。这就是它返回承诺的原因。
在我看来,您只是为了更新关系而尝试保存定义模型。你不需要这样做。第一次保存就足够了。应该在服务器上更新其他模型。
答案 1 :(得分:1)
首先你需要保存第一个模型设置返回数据到第二个模型保存第二个模型
<强> Route.js 强>
export default Ember.Route.extend({
model: function(params){
return this.store.find('Entry', params.entry_id);
},
actions: {
saveDef: function(){
// console.log('Saving . . .');
var def=this.controllerFor("deffinition").get("content"); // cotroller of defeinition route
var entry = this.controller.get('content'); // controller of entry route
def.save().then(function(res){
// console.log('Saved Success');
let def = _this.store.peekRecord('Definition', res.get('id'));
entry.set('deffinition', def);
entry.save().then(function (res) {
// Success callback
});
}, function(err){
// console.log(err);
});
}
}
});
答案 2 :(得分:0)
Ember不会对你的模特进行级联保存,你需要保存自己的其他模型。