搜索Ember数据async hasMany id而不加载所有id记录

Searching Ember data async hasMany ids without loading all the id records

本文关键字:id 加载 记录 数据 async hasMany 搜索 Ember      更新时间:2023-09-26

我正试图在数千条记录中搜索特定的记录。我已经加载了一个用户模型,它有几千个异步发货。换句话说,我让序列化程序发送带有用户模型的shipment_ids

App.User = DS.Model.extend({
  shipments: DS.hasMany('shipment', { async: true })
});

我想搜索所有这些id,看看某个特定记录的id是否在其中。然而,我不想去api并加载每一条记录。我只想能够在shipment_ids中进行搜索。

我有一个jsbin,展示了它加载所有记录的过程。我该如何更改它,使其不会对发货进行任何api调用,并且仍然可以找到特定的记录?

而不是做

this.get('shipments').any(function(shipment){
  return shipment.get('id') === "10124";

必须有办法只通过id,不是吗?

谢谢!

"获取belongsTo ID而不获取记录"中描述的解决方案似乎在Ember Data 1.0.0-beta.10版本中可以工作。简单地说,您可以执行以下操作来访问底层

modelInstance.get('data.belongsToRelation.id');

大概你也可以这样做(尽管我还没有测试过):

modelInstance.get('data.hasManyRelation');

原始答案(请勿使用):

我在belongsTo上为id添加了第二个模型字段,从而实现了这一点。我的示例:

App.User=DS.Model.extend({group:DS.belongsTo('group',{async:true}),groupId:DS.attr("编号")});

也许你能做到?

App.User=DS.Model.extend({装运:DS.hasMany("装运",{async:true}),shipmentIds:DS.attr("数组")});

您需要在app/transforms/array.js中添加一个数组转换(假设您使用ember-cli)

从"成员数据"导入DS;

var ArrayTransform=DS.Transform.extend({反序列化:函数(序列化){返回序列化;},serialize:函数(反序列化){返回反序列化;}});

导出默认的ArrayTransform;

让我知道它是否有效,因为我可能很快就会需要在我的应用程序中进行类似的操作。

这个黑客很臭,但这是我找到的唯一方法。并且是用_data 进行搜索

this.get('content._data.shipments').any(function(shipment){
  return shipment.get('id') === "10124";
});

它不会进行任何api调用。但必须有一种更容易接受的方法,在更新Ember时不会出现故障。

这里有一个更新的jsbin来显示这一点。有人有更好的解决方案吗?

谢谢!

由于Ember Data 2.3,您可以使用以下代码:

// get all ids without triggering a request
var commentIds = post.hasMany('comments').ids();

请参阅http://emberjs.com/blog/2016/01/12/ember-data-2-3-released.html详细信息。