Add payload to Ember deleteRecord

I have a requirement to include user comments in the payload whenever it tries to delete an item. So far I have this:

let remarks = this.get('remarks');
let id = this.get('itemID');

this.store.findRecord('item', id).then(function (selectedItem) {

    // TODO - DELETE doesn't accept payload in body?

    selectedItem.destroyRecord({remarks:remarks}).then(function(response){

        Ember.debug('delete successful:'+JSON.stringify(response));

        Ember.$('#confirmDelete').modal('hide');
        Ember.$('#remarks').val('');

        context.set('successful', true);
        context.set('message', context.get('i18n').t('success.role.delete'));                        

    }).catch(function(error){
        Ember.debug('delete failed:'+JSON.stringify(error));

        Ember.$('#confirmDelete').modal('hide');
        Ember.$('#remarks').val('');

        context.send('showErrors', error);
    });
});                 

This does not work. Thus, setting the value of comments in the model is as follows:

...
this.store.findRecord('item', id).then(function (selectedItem) {

    selectedItem.set('remarks', remarks);

    selectedItem.destroyRecord().then(function(response){
...

I'm trying to override deleteRecord, but I don't know where to start or how to do it.

Does anyone have any ideas? Thank!

+4
source share
1 answer

You can easily achieve this behavior by expanding your application adapter with the following mixin:

/* app/mixins/delete-with-playload.js */

import Ember from 'ember';

export default Ember.Mixin.create({
  deleteRecord(store, type, snapshot) {
    var id = snapshot.id;
    var data = {};
    var serializer = store.serializerFor(type.modelName);

    serializer.serializeIntoHash(data, type, snapshot);

    return this.ajax(this.buildURL(type.modelName, id, snapshot, 'deleteRecord'), "DELETE", {
      data
    });
  }
});

Then just add it to your application adapter

/* app/adapters/application.js */

import RestAdapter from 'ember-data/adapters/rest';
import DeleteWithPayloadMixin from '../mixins/delete-with-payload';
export default RestAdapter.extend(DeleteWithPayloadMixin);

, PUT, :

{
  "<model-name>": {
    // model serialized attributes
  }
}

, , .

model.setProperties({
  deleteReason: 'whatever'
});
model.destroyRecord();
/* 
results a DELETE request when requestBody is "{
  "<model-name>": { 
    ... 
    "deleteReason": "whatever"
    ...
  }
}"
*/
+6

All Articles