Ember.js 如何在addObjects期间删除余烬数据中的重复记录

Ember.js 如何在addObjects期间删除余烬数据中的重复记录,ember.js,ember-data,Ember.js,Ember Data,我正在处理一组可能具有重复值的数据。当我最初添加数据时,我使用的是客户机上仅有的少量信息(存储在内存中模型上的静态信息) 但是,因为每次显示Handlebar模板时,我都需要获取最新的数据,所以我也会在computed属性中触发一个“findAll”,以获取自最初的ember应用程序启动以来可能已经到达服务器端的任何新数据 在此过程中,我在ember数据模型上使用了“addObjects”方法,但当返回服务器端时,我在数组中看到重复的记录(假设这是因为它们没有相同的clientId) App.D

我正在处理一组可能具有重复值的数据。当我最初添加数据时,我使用的是客户机上仅有的少量信息(存储在内存中模型上的静态信息)

但是,因为每次显示Handlebar模板时,我都需要获取最新的数据,所以我也会在computed属性中触发一个“findAll”,以获取自最初的ember应用程序启动以来可能已经到达服务器端的任何新数据

在此过程中,我在ember数据模型上使用了“addObjects”方法,但当返回服务器端时,我在数组中看到重复的记录(假设这是因为它们没有相同的clientId)

App.Day=DS.Model.extend({
任命:职能(){
//这将影响后端服务器,因此速度较慢
返回App.Appointment.find();
}.property(),
插槽:函数(){
//这里不需要点击后端服务器,所以速度很快
返回App.Slot.all();
}.property(),
组合:函数(){
var apts=this.get('apppointments'),
slots=this.get('slots');
对于(var i=0;i
是否可以告诉一个余烬数据模型是什么使它唯一,这样当承诺得到解决时,它就会知道“AdapterPopulatedRecordArray中已经存在这个值,所以我只更新它的值,而不是显示两次”

您可以使用

DS.RESTAdapter.map('App.Slot', {
  primaryKey: 'name-of-attribute'
});
DS.RESTAdapter.map('App.Appointment', {
  primaryKey: 'name-of-attribute'
});
但我认为这仍然是不可能的,因为
App.Slot
App.Appointment
是不同的模型类,所以如果它们具有相同的ID,则不会有帮助。您需要对插槽和约会使用相同的模式,才能使其正常工作

编辑 检查完ember数据后,我认为您可以在定义类时定义
primaryKey
,如:

App.Slot = DS.Model.extend({
    primaryKey: 'myId',
    otherField: DS.attr('number')
});
但是我没有测试它。。

编辑2
之后,似乎不再支持上一次编辑。您需要像我前面写的那样使用
map

我刚刚更新了上面的代码——实际上我现在为每个插槽创建了一个“空”约会(所以它只有1个型号)。这样,我添加的约会只是某种占位符——如果服务器端的时间段是空的(没有坏处,它仍然是空的)。。但是,如果该插槽(服务器端)中已经有约会,我需要根据开始/结束值更新项目(这是可能的还是primaryKey的想法是单个字段?),现在您可以使用
primaryKey
映射来定义自定义id,但从源代码来看,它似乎是单个字段。我认为您需要编写自己的适配器,或者,可能是一个序列化程序(工作量较小)。您可以创建一个自定义字段,该字段是以一种通信方式组合的开始/结束,并使用该字段作为id。类似start-X-end的内容可能会出现。如果我创建一个项目,在ajax调用ember数据内部爆炸后可能存在PK(似乎它不喜欢这种方法-在PK已经在对象图中之后加载记录)。你做这件事运气好吗?
App.Slot = DS.Model.extend({
    primaryKey: 'myId',
    otherField: DS.attr('number')
});