我们将Ember Data与标准RestAdapter一起使用,到目前为止效果良好。我们可以使用OneToOne和ManyToMany关系保存对象,但当我们尝试使用OneToMany关系来保存对象时,当调用save()
时,添加到多边的任何对象都将被丢弃。以下代码:
两种型号:
Ember.Owner = DS.Model.extend({
name: DS.attr('string'),
pets: DS.hasMany('pet', {async: true});
});
Ember.Pet = DS.Model.extend({
name: DS.attr('string'),
owner: DS.belongsTo('owner', {async: true});
});
控制器代码:
actions: {
save: function() {
var self = this;
var petSaved = function(pet) {
// Create the owner
var owner = self.store.createRecord ('owner', {
name: 'Walt',
});
// Add the new pet then save the owner
owner.get('pets').then(function(pets) {
pets.addObject(pet);
// Logging the owner at this point shows that pet has been added and has been assigned an id from the DB
owner.save();
// Logging the owner at this point shows no pets
});
};
// Create the pet
var pet = this.store.createRecord('pet', {
name: 'Lassie',
});
// Save the pet
pet.save().then(petSaved);
},
},
使用与上面基本相似的代码,我们可以成功地保存ManyToMany和OneToOne关系,但由于某些原因,此代码失败了。经过大量的谷歌搜索,我们已经了解到这要么是EmberData错误,要么是Ember出于效率考虑做出的明确设计决定,但后者没有意义,因为可以通过这种方式保存ManyToMany关系。
我们将非常感谢您对这个问题的任何见解,以及如何解决它?
您需要将DS.EmbeddedRecordsMixin
包含到App.OwnerSerializer
中。
它应该看起来像。。。
App.OwnerSerializer = DS.RESTSerializer.extend(DS.EmbeddedRecordsMixin, {
attrs: {
pets: {serialize: 'ids', deserialize: 'ids'}
}
})