存储pushPayload调用后返回记录

时间:2014-04-22 04:37:08

标签: ember.js ember-data

调用DS.Store#pushPayload后是否有更好的方法来返回记录?这就是我正在做的......

var payload = { id: 1, title: "Example" }
store.pushPayload('post', payload);
return store.getById('post', payload.id);

但是,使用常规DS.Store#push,您将获得插入的记录。根据我的判断,两者之间的唯一区别是DS.Store#pushPayload使用正确的序列化器序列化有效负载数据。

2 个答案:

答案 0 :(得分:5)

DS.Store#pushPayload能够获取项目的数组,而不只是一个,并且可能包含侧载数据。它处理完整的有效负载并期望有效负载中的根密钥:

{
  "posts": [{
    "id": 1,
    "title": "title",
    "comments": [1]
  }],
  "comments": [
    //.. and so on ...
  ]
}

DS.Store#push期望一条记录已经规范化并且不包含侧载数据(注意没有根密钥):

{
  "id": 1,
  "title": "title",
  "comments": [1]
}

出于这个原因,push返回记录是有意义的,但pushPayload不返回任何内容。

当您使用pushPayload时,第二次查找store.find('post', 1)(或store.getById('post', 1))是可行的方法,我不相信有更好方式。

答案 1 :(得分:3)

this PR开始pushPayload现在可以在启用'ds-pushpayload-return' feature flag后返回推送到商店的所有记录的数组。

目前,此功能在标准版或测试版中无法使用 - 您必须使用

"ember-data": "emberjs/data#master",

(即Canary)在package.json中以便访问它。我不确定该功能何时可用。