我有两个模型通过利用async
属性通过belongsTo
(互惠关系,即 1:1)相互关联。检索一条记录并将其设置为路由器上的模型后,我可以访问主记录及其关联的属性 - 那里一切正常。我使用输入帮助程序将属性绑定到input
和textarea
元素,以便用户可以对模型进行更改,包括关联记录上的属性。但是,当我运行save()
函数时,Ember 只对主记录发出PUT
请求,而不是对关联的记录发出请求,即使它是更改的记录。
入门.js(型号)
export default DS.Model.extend({
// Properties
entry: DS.attr('Number'),
...
// Relational properties
definition: DS.belongsTo('definition', {async: true}),
...
});
定义.js(型号)
export default DS.Model.extend({
// Properties
blocks: DS.attr(),
...
// Relational properties
entry: DS.belongsTo('entry', {async: true}),
...
});
路线.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);
});
}
}
});
提前谢谢。
在 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时,需要从服务器获取模型。这就是它返回承诺的原因。
在我看来,您正在尝试保存定义模型只是为了更新关系。你不需要这样做。第一次保存就足够了。更新其他模型应在服务器上完成。
首先你必须保存第一个模型,将返回的数据设置为第二个模型保存第二个模型
路线.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);
});
}
}
});
处理关系
Ember 不会对你的模型进行级联保存,你需要自己保存另一个模型。