Ember.js 在余烬删除记录中添加有效负载

Ember.js 在余烬删除记录中添加有效负载,ember.js,ember-data,Ember.js,Ember Data,我有一个要求,当用户试图删除一个项目时,在有效负载中包含用户的备注。到目前为止,我有: 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.dest

我有一个要求,当用户试图删除一个项目时,在有效负载中包含用户的备注。到目前为止,我有:

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.store.findRecord('item', id).then(function (selectedItem) {

    selectedItem.set('remarks', remarks);

    selectedItem.destroyRecord().then(function(response){
...
我试图覆盖
deleteRecord
,但我不知道从哪里开始,也不知道如何执行


有人有想法吗?谢谢

通过使用以下mixin扩展应用程序适配器,可以轻松实现这种行为:

/*app/mixins/delete-with-playload.js*/
从“余烬”导入余烬;
导出默认的Ember.Mixin.create({
deleteRecord(存储、类型、快照){
var id=snapshot.id;
变量数据={};
var serializer=store.serializerFor(type.modelName);
serializer.serializeIntoHash(数据、类型、快照);
返回this.ajax(this.buildURL(type.modelName,id,snapshot,'deleteRecord'),“DELETE”{
数据
});
}
});
然后将其添加到应用程序适配器中

/*app/adapters/application.js*/
从'ember data/adapters/rest'导入RestAdapter;
从“../mixins/delete with payload”导入DeleteWithPayloadMixin;
导出默认的RestAdapter.extend(DeleteWithPayloadMixin);
这将产生与
PUT
方法的有效载荷相同的有效载荷,表示以下形式的有效载荷:

{
"": {
//模型的序列化属性
}
}
现在,您所要做的就是在删除记录之前在记录上设置所需的属性,并销毁记录

model.setProperties({
删除原因:“无论什么”
});
model.record();
/* 
当requestBody为“”时,生成删除请求{
"": { 
... 
“删除原因”:“无论什么”
...
}
}"
*/

我唯一能想到的就是定制适配器/序列化程序。一些变通建议:首先用您的评论更新项目怎么样?或者添加头(在适配器中)?不要真的删除那条记录,而是设置一个删除标志(因为你可能想把那句话保存在某个地方)?@jeff,谢谢你的建议。我目前受到后端API的限制。现在无法更改它们。我正在考虑定制适配器,但我不知道如何将注释从控制器传递到我覆盖的deleteRecord函数。嗨@Ramy,我只是想了解为什么要将覆盖放在mixin中?它不能在适配器内部吗?无论如何,我想我尝试过这样做,但是得到了一个错误,它告诉我我试图删除一个未提交的属性更改(因为我设置了模型的“备注”属性)。虽然我无法确定这是否真的是问题。无论如何,我会试试这个。谢谢@SimplyMody混合是为了模块化。例如,如果您希望仅在模型的子集上应用这种
DELETE
行为,您可以为每个模型实现
app/adapters/.js
,并使用此mixin扩展每个适配器,避免代码重复。@SimplyMody我用ember测试了它-data@2.4.0最后没有任何错误,我成功了!谢谢!:)顺便说一句,我再次遇到错误
错误:试图在root.deleted.inFlight状态下处理事件``pushedData```。发现此错误来自我实现的
normalizeResponse
函数。我想我是在履行承诺之前操纵了有效载荷。无论如何,我会接受你的回答。非常感谢。