Extjs网格和本地存储在更新存储时在网格中创建重复项

Extjs网格和本地存储在更新存储时在网格中创建重复项,extjs,grid,duplicates,store,Extjs,Grid,Duplicates,Store,我有一个带有本地存储的小网格,每次我更新该存储中的数据时,存储中的记录都会更新,但更新的记录会添加到网格中,而不是替换旧记录 网格: 如您所见,有一个“id”字段,Extjs正确使用该id来更新存储 如果我对存储区触发3次相同的“add()”,我会在网格中得到3个相同的行,而存储区中仍然只有一条记录 为什么? 谢谢 第一次将该方法添加到存储时,每个记录只能使用一次 如果要更新现有记录,则需要在存储中找到该记录(例如,使用),然后在其上设置新值 因此,如果您想要更新或添加(如果它还不存在),您可以

我有一个带有本地存储的小网格,每次我更新该存储中的数据时,存储中的记录都会更新,但更新的记录会添加到网格中,而不是替换旧记录

网格:

如您所见,有一个“id”字段,Extjs正确使用该id来更新存储

如果我对存储区触发3次相同的“add()”,我会在网格中得到3个相同的行,而存储区中仍然只有一条记录

为什么?

谢谢

第一次将该方法添加到存储时,每个记录只能使用一次

如果要更新现有记录,则需要在存储中找到该记录(例如,使用),然后在其上设置新值

因此,如果您想要更新或添加(如果它还不存在),您可以执行以下操作:

var store = this.Grids.Highlights.getStore(),
    record = store.getById(id),
    properties = {
        PRIORITY: priority,
        ICON: icon,
        GROUPICON: groupicon,
        QUANTITY: quantity,
        HIGHLIGHT: highlight
    };

// if the record already exists in the store, update it
if (record) {
    record.set(properties);
    record.commit();
}
// else add a new record
else {
    store.add(Ext.apply(properties, {id: id}));
}

我很惊讶。我还以为是虫子呢。当我在具有相同id的存储上使用add()时,它确实会更新存储中的记录(没有重复项,因此它会检测id键并用更新的数据覆盖正确的记录),那么为什么网格中会有重复项呢?我在add()之后添加了“this.Grids.Highlights.getView().bindStore(this.Grids.Highlights.getStore());”,一切正常,但我知道这是一个丑陋的补丁。。。
    Highlight:function(store,id,highlight,icon,priority,groupicon){
    //SET VALUES
    if(typeof icon == 'undefined'){ var icon = '';}
    if(typeof priority == 'undefined'){ var priority = 9;}
    var quantity = store.data.length;
    //ADD / UPDATE
    if(quantity>0){
        this.Grids.Highlights.getStore().add({PRIORITY:priority,ICON:icon,GROUPICON:groupicon,QUANTITY:quantity,HIGHLIGHT:highlight,id:id});
    }           

}
var store = this.Grids.Highlights.getStore(),
    record = store.getById(id),
    properties = {
        PRIORITY: priority,
        ICON: icon,
        GROUPICON: groupicon,
        QUANTITY: quantity,
        HIGHLIGHT: highlight
    };

// if the record already exists in the store, update it
if (record) {
    record.set(properties);
    record.commit();
}
// else add a new record
else {
    store.add(Ext.apply(properties, {id: id}));
}