Ember.js:如何从store.findRecord调用中访问JSON API元数据

6

我目前正尝试弄清如何在使用store.findRecord()调用时访问元数据。

在指南中(http://guides.emberjs.com/v2.1.0/models/handling-metadata/),它说可以通过以下方式访问元数据:

store.query('post').then((result) => {
  let meta = result.get('meta');
})

我希望在使用findRecord时,这也能起作用。

store.findRecord('book', params.id, {adapterOptions: {query: params}}).then((result) => {
    let meta = result.get('meta');
})

然而,使用findRecord时,meta属性总是返回未定义。我猜测在使用findRecord时没有设置元数据。我会返回一个有效的JSON-API格式,顶层包含如下meta属性:

{
  "meta": {
    "page": {
      "number": 1,
      "size": 100,
      "total": 20
    },
   "data":[
       // data here
    ]
  }
}

当使用JSONAPISerializer和JSONAPIAdapters的findRecord()方法时,有没有一种方法可以访问服务器返回的元数据?

谢谢!

我正在使用以下版本:

Ember             : 2.1.0
Ember Data        : 2.1.0
jQuery            : 1.11.3

在执行findRecord时,记录是否已经存在于存储中? - Tyler Iguchi
好的想法,但它目前还没有在商店中。我也检查了Chrome检查器,确保网络请求正在进行,而且是正常的。我开始认为这种情况现在就不支持。根据在Slack上的一些讨论,似乎元键只适用于集合。 - Sarus
请查看Ember指南中关于query vs queryRecord vs findRecord等的内容。我认为你尝试使用findRecord做的事情是不可能的:http://guides.emberjs.com/v2.1.0/models/finding-records/ - vikram7
@vikram7 是的,我认为 findRecord 默认不支持元数据。我很好奇是否有解决方法。 - Sarus
你可以重写序列化器。 - andorov
我可能来晚了,但是...我不太了解Ember Data,但似乎即使它通过findRecord公开元数据,它也会从资源对象内部(即在"data"中)公开元数据,而不是从顶层公开,对吗? - Ethan
1个回答

2

元数据不支持按记录基础,如果使用store.query()或获取关系时,可以保证可用性。

目前,Ember Data只能理解查询和关系(通过相关链接)的顶层meta对象。

请查看以下GitHub帖子以获取更多信息。


2
FYI,我在这里发布了一种实现此操作的方法:https://dev59.com/fZTfa4cB1Zd3GeqPOUWy#38312846 - Sarus

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接