Javascript 异步搜索余烬数据有许多id,而不加载所有id记录

Javascript 异步搜索余烬数据有许多id,而不加载所有id记录,javascript,ruby-on-rails,ember.js,ember-data,Javascript,Ruby On Rails,Ember.js,Ember Data,我正试图在几千条记录中搜索一条特定的记录。我已经加载了一个用户模型,它有几千个异步发货。换句话说,我让序列化程序使用用户模型向下发送shipping\u id App.User = DS.Model.extend({ shipments: DS.hasMany('shipment', { async: true }) }); 我想搜索所有这些id,看看其中是否有特定记录的id。但是我不想去api加载每一条记录。我只想能够搜索装运ID 显示它加载所有记录。我如何更改它,使它不会对装运进行任何

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

App.User = DS.Model.extend({
  shipments: DS.hasMany('shipment', { async: true })
});
我想搜索所有这些id,看看其中是否有特定记录的id。但是我不想去api加载每一条记录。我只想能够搜索
装运ID

显示它加载所有记录。我如何更改它,使它不会对装运进行任何api调用,并且仍然可以找到特定记录

而不是做

this.get('shipments').any(function(shipment){
  return shipment.get('id') === "10124";
必须有办法只通过身份证,不是吗


谢谢

这个黑客很臭,但这是我找到的唯一方法。它是用
\u数据搜索的

this.get('content._data.shipments').any(function(shipment){
  return shipment.get('id') === "10124";
});
它不会进行任何api调用。但必须有一个更可接受的方法,在更新余烬时不容易被破坏

来证明这一点。有谁有更好的解决方案吗


谢谢

这个黑客很臭,但这是我找到的唯一方法。它是用
\u数据搜索的

this.get('content._data.shipments').any(function(shipment){
  return shipment.get('id') === "10124";
});
它不会进行任何api调用。但必须有一个更可接受的方法,在更新余烬时不容易被破坏

来证明这一点。有谁有更好的解决方案吗

谢谢

中描述的解决方案“” 似乎在余烬数据1.0.0-beta.10中起作用。简单地说,您可以执行以下操作来访问底层

modelInstance.get('data.belongsToRelation.id');
大概您也可以这样做(尽管我没有测试过):

原始答案(请勿使用):

我通过为id添加第二个模型字段在belongsTo上完成了此操作。我的示例:

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

也许你能做到

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

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

从“余烬数据”导入DS

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

导出默认数组转换

让我知道它是否有效,因为我可能很快需要在我的应用程序中使用类似的东西

“”中描述的解决方案 似乎在余烬数据1.0.0-beta.10中起作用。简单地说,您可以执行以下操作来访问底层

modelInstance.get('data.belongsToRelation.id');
大概您也可以这样做(尽管我没有测试过):

原始答案(请勿使用):

我通过为id添加第二个模型字段在belongsTo上完成了此操作。我的示例:

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

也许你能做到

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

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

从“余烬数据”导入DS

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

导出默认数组转换

让我知道它是否有效,因为我可能很快需要在我的应用程序中使用类似的东西


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

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

有关详细信息,请参阅。

由于余烬数据2.3,您可以使用以下代码:

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

有关详细信息,请参阅。

这确实有效。我从未想过像这样从json中捕获ID。您也可以省略数组变换,余烬将猜测它是一个数组。谢谢嗨,我刚刚意识到我的方法会给belongsTo带来一些严重的bug。基本上,一旦添加
groupId
:DS.attr('number')属性,它将打乱规范化过程,并中断对“属于”关系的异步查找。我会看看我是否能想出一个解决办法,但同时要得到警告。因此,您的更新基本上是按照我最初的答案进行的。:]mmmm@bfcoder有一个区别-您的答案使用
\u数据
而不是
数据
@leejt489虽然您是正确的,但它仍然是相同的数据。它只是以一种不同的方式访问。这确实有效。我从未想过像这样从json中捕获ID。您也可以省略数组变换,余烬将猜测它是一个数组。谢谢嗨,我刚刚意识到我的方法会给belongsTo带来一些严重的bug。基本上,一旦添加
groupId
:DS.attr('number')属性,它将打乱规范化过程,并中断对“属于”关系的异步查找。我会看看我是否能想出一个解决办法,但同时要得到警告。因此,您的更新基本上是按照我最初的答案进行的。:]mmmm@bfcoder有一个区别-您的答案使用
\u数据
而不是
数据
@leejt489虽然您是正确的,但它仍然是相同的数据。它只是以不同的方式访问。不,你不能,你可以从Ember Data 2.5.x开始访问+不,你不能,你可以从Ember Data 2.5.x开始访问+