本地存储代理在Extjs 4.1中似乎相当麻烦。请告诉我我做错了什么。Extjs4 localstorage - 如何删除所有记录?
我试图(像其他人一样)从服务器加载数据,然后将其存储在本地以供离线使用。我的问题涉及刷新数据(在浏览器中重新加载)。 removeAll()
不会删除任何记录。我读过,您可以通过本地存储代理本身调用clear()
来清除本地存储。记录被删除时,密钥生成器不会重置。我担心这最终会导致问题。
在我的代码中,我在做什么会导致LocalStorage行为失常?我知道模型中的设置ID是正确的,但我认为我正确地做到了这一点。
这里的模型和存储:
Ext.define('MAP.model.LookupData', {
extend: 'Ext.data.Model',
idProperty:'localId',
fields: [
'localId', // used for storing data via a localstorage proxy. -jg
'name',
'value'
]
});
Ext.define('MAP.store.LocalCloudConditionStore', {
extend: 'Ext.data.Store',
model: 'MAP.model.LookupData',
storeId: 'localCloudConditionStore',
proxy: {
type: 'localstorage',
id : 'cloud-conditions'
}
});
这里的代码试图利用removeAll()
清除本地存储:
offlineStore.load();
offlineStore.removeAll();
offlineStore.sync();
Ext.each(records,function(record){
var added = offlineStore.add(record.getData())[0];
console.log(added.get('id'));
});
offlineStore.sync();
什么地方存储代理写入到我的浏览器:
而且第二次重新加载。它不删除之前的:如果我尝试使用proxy.clear()
,记录消失,但idGenerator种子不复位:
offline.getProxy().clear();
Ext.data.StoreManager.register(offline);
Ext.each(records,function(record){
var added = offline.add(record.getData())[0];
console.log(added.get('id'));
});
offline.sync();
谢谢为你的眼球。
UPDATE
我已经能够通过直接正在重置实例我localstore前值本地存储的计数器复位。很明显,这会导致保留,所以它并不理想。
window.localStorage.setItem('cloud-conditions-counter',0);
var offline = Ext.create('MAP.store.LocalCloudConditionStore');
offline.getProxy().clear();
UPDATE DEUX
经过进一步思考,我认为这是正确的不重置计数器。当mysql中的表被截断时,您不会重置序列号。如果使用已删除记录的某个缓存标识(假设标识为1)从表中提取数据,则可能会导致问题。完全不同的记录将被返回而不是被删除的记录。好吧,有道理。
不过,为什么heck没有store.removeAll(); store.sync()
工作?
当在一个SQL数据库中的表被截断,引擎重置序列号,如果你删除记录,而不使用TRUNCATE语句,然后你不”重置序列。我有同样的问题,我的顾虑是因为商店不重置柜台。如果您调用store.count(),则返回正确的值。 – rernesto