本地存儲代理在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