vendredi 29 mai 2015

Why is a "ManyToOne" relation treated differently when serializing in ember-data?

My question is highly related to "Ember Data: Saving relationships" but I don't care about embedding - I just want a working OneToMany (bi-directional) relationship. Take for example the following models:

App.Child = DS.Model.extend({
    name: DS.attr('string'),
    toys: DS.hasMany('toy'),
});
App.Toy = DS.Model.extend({
    name: DS.attr('string'),
    child: DS.belongsTo('child')
});

and the following object creations/saves:

var store = this.get('store');

store.createRecord('child', {name: 'Herbert'}).save().then(child => {
    store.createRecord('toy', {name: 'Kazoo', child: child}).save().then(toy => {
        child.get('toys').pushObject(toy);
        return child.save();
    });
});

I would expect the child, when serialized to reference the toy. E.g. something like

{
   'name': 'Herbert',
   'toys': [ 1 ]
}

But it doesn't. Because this is a "manyToOne" relation ship and ember-data won't serialize these: http://ift.tt/1J8GUQE

If you make it a ManyToNone relation by removing the belongsTo it will work but you will lose the back reference.

Why is this special behaviour? Why is ManyToOne that different from ManyToNne or ManyToMany that it deserves such special treatment?

Where is this behaviour documented? I totally missed it and assumed it was a bug in the Serializer / Adapter I'm using.

What is the correct way to achieve my desired serialization?




Aucun commentaire:

Enregistrer un commentaire