我正在使用一组可能具有重复值的数据。当我最初添加数据时,我正在使用客户端上可用的少量信息(存储在内存中的模型上的静态信息)。
但是因为我需要在每次显示把手模板时获取最新信息,所以我还会在计算属性中触发“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中,所以我只是更新它的值而不是显示它两次”
答案 0 :(得分: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 的the source后,我认为您可以在定义类时定义 < / p> <击>
primaryKey
,例如:
App.Slot = DS.Model.extend({
primaryKey: 'myId',
otherField: DS.attr('number')
});
虽然我没有测试过..
击>
further reading之后似乎不再支持上一个编辑。你需要像我之前写的那样使用map
。