调用 ember 数据的 destroyRecord() 时如何从 json-api 服务器的 200 响应中访问顶级元键 [英] How to access top level meta key from json-api server's 200 response when calling ember data's destroyRecord()

查看:10
本文介绍了调用 ember 数据的 destroyRecord() 时如何从 json-api 服务器的 200 响应中访问顶级元键的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在开发一个使用 Ember Data 和现在默认的 json-api 适配器的 Ember 应用程序.

根据 json-api 规范 (http://jsonapi.org/format/#crud-删除) 删除记录时,如果删除成功,服务器应返回 200 响应,并且服务器仅使用顶级 meta 键进行响应.

我当前的服务器就是这样做的,我正在尝试弄清楚如何在使用 Ember Data 的 model.destroyRecord() 方法时访问顶级元对象中的数据.

myModel.destroyRecord().then(function(model){//返回值是模型.我怎样才能获得实际的元数据//由服务器返回?});

服务器响应包含有关确切删除内容的信息,如下所示:

<代码>{元":{数字删除-a: 10,num-deleted-b: 100,num-deleted-c: 200}}

我想获取此信息,以便向用户显示.

谢谢!

我正在使用以下版本:

Ember : 2.2.0灰烬数据:2.3.3jQuery:1.11.3

解决方案

Ember 不支持 meta 单模型请求 (find,save> 和 destroyRecord) 此刻!

如果你想要这个,你必须连接到 ember 内部.

以下代码使用了 ember 2.3 中的 ember 内部结构,可能会在未来版本中损坏!

store 上有一个未公开的 _metadataFor 函数,它为您提供给定类型的最后一个元数据.我使用自定义初始值设定项始终将其保存到 Model:

从'ember'导入Ember;从余烬数据"导入 DS;const {set} = Ember;导出函数初始化(应用程序){DS.Model.reopen({元:空,didCommit() {this._super(...参数);set(this, 'meta', this.store._metadataFor(this.constructor.modelName));}});};导出默认{名称:'元',初始化:初始化};

在此之后,您可以执行 model.save().then(() => console.log(model.get('meta')))model.destroyRecord.then(() => console.log(model.get('meta'))).

也许可以看看这个 ember-twiddle.

I'm working on an Ember app that is using Ember Data and the now default json-api adapter.

According to the json-api spec (http://jsonapi.org/format/#crud-deleting) when deleting a record your server should return a 200 response if the deletion is successful and the server responds with just a top level meta key.

My current server does just this and I'm trying to figure out how to access the data in the top level meta object when using Ember Data's model.destroyRecord() method.

myModel.destroyRecord().then(function(model){
    // the returned value is the model.  How can I get the actual metadata 
    // returned by the server?   
});

The server response contains information about what exactly was deleted and looks like this:

{
   "meta": {
      num-deleted-a: 10,
      num-deleted-b: 100,
      num-deleted-c: 200
    }
}

I'd like to get this information so I can display it to the user.

Thank you!

I am using the following versions:

Ember             : 2.2.0
Ember Data        : 2.3.3
jQuery            : 1.11.3

解决方案

Ember does not support meta for single model requests (find,save and destroyRecord) at the moment!

If you want this you have to hook into ember internals.

The following code uses ember internals from ember 2.3 and may break in future versions!

There is the undocumented _metadataFor function on the store that gives you the last metadata for a given type. I use a custom initializer to always save it to the Model:

import Ember from 'ember'; 
import DS from 'ember-data';
const {set} = Ember;
export function initialize(application) {
  DS.Model.reopen({
    meta: null,
    didCommit() {
      this._super(...arguments);
      set(this, 'meta', this.store._metadataFor(this.constructor.modelName));
    }
  });
};

export default {
  name: 'meta',
  initialize: initialize
};

After this you can do model.save().then(() => console.log(model.get('meta'))) or model.destroyRecord.then(() => console.log(model.get('meta'))).

Maybe checkout this ember-twiddle.

这篇关于调用 ember 数据的 destroyRecord() 时如何从 json-api 服务器的 200 响应中访问顶级元键的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆