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