2

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

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

在此过程中,我在 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 模型是什么使它独一无二,以便在解决承诺时它会知道“这已经存在于 AdapterPopulatedRecordArray 中,所以我将更新它的值而不是显示两次”

4

1 回答 1

2

您可以使用

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

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

编辑

检查ember-data的来源后,我认为您可以在定义类时定义,例如:primaryKey

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

虽然我没有测试它..

编辑 2

进一步阅读后似乎不再支持以前的编辑。你需要map像我之前写的那样使用。

于 2013-02-07T12:44:45.017 回答