在Ember.js中保存OneToMany关系的问题



我们将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'}
  }
})

最新更新