简体   繁体   English

在Ember deleteRecord中添加有效负载

[英]Add payload in Ember deleteRecord

I have a requirement to include remarks from user in the payload whenever he 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);
    });
});                 

It doesn't work. 它不起作用。 So does setting the remarks value in the model like: 在模型中设置备注值也是如此:

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

    selectedItem.set('remarks', remarks);

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

I am trying to override the deleteRecord but I don't know where to start or how to do it. 我试图覆盖deleteRecord但我不知道从哪里开始或如何做到这一点。

Anyone have ideas? 有人有想法吗? Thanks! 谢谢!

You can easily achieve this kind of behaviour by extending your application adapter with the following mixin: 通过使用以下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);

This will result a payload identical to the payload of PUT method, meaning a payload of the form: 这将导致有效负载与PUT方法的有效负载相同,这意味着形式的有效负载:

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

Now all you have to do is to set the desired attributes on the record before deleting, and destroy the record. 现在,您所要做的就是在删除之前在记录上设置所需的属性,并销毁记录。

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM