如何在addObjects中删除ember-data中的重复记录

时间:2013-02-07 12:25:26

标签: ember.js ember-data

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

但是因为我需要在每次显示把手模板时获取最新信息,所以我还会在计算属性中触发“findAll”以获取自启动初始ember应用程序以来可能已经命中服务器端的任何新数据。 / p>

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

App.Day = DS.Model.extend({
    appointments: function() {
        //this will hit a backend server so it's slow
        return App.Appointment.find();
    }.property(),
    slots: function() {
        //no need to hit a backend server here so it's fast
        return App.Slot.all();
    }.property(),
    combined: function() {
        var apts = this.get('apppointments'),
        slots = this.get('slots');
        for(var i = 0; i < slots.get('length'); i++) {
          var slot = slots.objectAt(i);
          var tempApt = App.Appointment.createRecord({start: slot.get('start'), end: slot.get('end')});
          apts.addObjects(tempApt);
        }            

        return apts;
    }.property()
});

是否有可能告诉一个ember-data模型是什么使它独特,这样当promise得到解决时,它会知道“这已经存在于AdapterPopulatedRecordArray中,所以我只是更新它的值而不是显示它两次”

1 个答案:

答案 0 :(得分:2)

您可以使用

DS.RESTAdapter.map('App.Slot', {
  primaryKey: 'name-of-attribute'
});
DS.RESTAdapter.map('App.Appointment', {
  primaryKey: 'name-of-attribute'
});

但我认为这仍然是不可能的,因为App.SlotApp.Appointment是不同的模型类,所以如果它们具有相同的ID,它将无济于事。您需要为插槽和约会使用相同的模型才能工作。

修改

在检查 ember-data the source后,我认为您可以在定义类时定义primaryKey,例如: < / p> <击>

App.Slot = DS.Model.extend({
    primaryKey: 'myId',
    otherField: DS.attr('number')
});

虽然我没有测试过..

编辑2

further reading之后似乎不再支持上一个编辑。你需要像我之前写的那样使用map