vendredi 17 avril 2015

Ember Data model.save misses fields in request body when mapping chagned in keyForAttribute

I run into a problem when use Ember-data to save a model. The JSON structure for my model looks like:



{ post: {
id: 1,
name: 'post-1',
trigger: ['trigger-1', 'trigger-2'],
data: ['data-1', 'data-2']
}
}


Because 'data' and 'trigger' are reserved keywords for DS.Model, I created a mapping and renamed them to sc_data and sc_trigger as suggestion by Jurre using



Application.SERIALIZATION_KEY_MAPPINGS = {
'sc_data': 'data',
'sc_trigger': 'trigger'
};

Application.ApplicationSerializer = DS.ActiveModelSerializer.extend({
keyForAttribute: function (attr) {
if (Application.SERIALIZATION_KEY_MAPPINGS.hasOwnProperty(attr)) {
return Application.SERIALIZATION_KEY_MAPPINGS[attr];
} else {
return this._super(attr);
}
}
});


So my model for post looks like:



Application.Post = DS.Model.extend({
name: DS.attr('string'),
sc_trigger: DS.attr(),
sc_data: DS.attr()
});


the sc_trigger and sc_data are renmaed mapping for data and trigger.


It all worked fine when use this.store.find('post') and this.store.find('post', 1), i.e. GET calls. When I try to create a record using this.store.createRecord('post'), it creates a record with the correct attribute name sc_data and sc_trigger.



var newPost = this.store.create('post', {
name: 'test post',
sc_data: [],
sc_trigger: []
})


And the serialize function interprets the mapping correctly as well. newPost.serialize() returns



{
name: 'test post',
data: [],
trigger: []
}


But when I call newPost.save(), in the HTTP request body of the POST call, data and trigger field is missing. It only has



{
name: 'test post'
}


I have no idea why newPost.save() doesn't generate the correct request body when serialize() is working just fine.


Aucun commentaire:

Enregistrer un commentaire