Ember Data有重复记录

时间:2015-02-09 19:56:10

标签: ember.js ember-data

在我的应用中,用户可以创建消息并发送。当用户发送消息时,将使用createRecord创建消息,如果成功,服务器将回复201 Created。

此外,用户可以通过websocket从其他用户获取消息。当收到消息时,我会使用pushPayload将其推送到商店。

var parsedData = JSON.parse(data);
this.store.pushPayload('message', parsedData);

问题是,当用户发送消息并保存消息时,他们也会从websocket中获取消息,即使两个对象具有相同的ID,商店也会以重复的消息结束。

我如何告诉商店,而不是推送或保存具有相同ID的现有元素的东西,它应该覆盖它?

2 个答案:

答案 0 :(得分:3)

在添加模型之前,只需执行检查以查看模型是否已在商店中:

var parsedData = JSON.parse(data);
if(this.store.hasRecordForId ('typeOfYourRecord', parsedData.id)){
    // logic you want to run when the model is already in the store
    var existingItem = this.store.find('typeOfYourRecord', parsedData.id);
    // perform updates using returned data here
} else {
    this.store.pushPayload('message', parsedData);
}

答案 1 :(得分:3)

我发现避免此问题的唯一方法是在新的runloop中运行我的更新。如果以ms为单位的延迟时间足够长,则不会出现问题。

似乎几乎同时从websocket和请求接收更新会在Ember Data中创建竞争条件。