gpt4 book ai didi

local-storage - Extjs4 localstorage -- 如何删除所有记录?

转载 作者:行者123 更新时间:2023-12-04 05:30:31 24 4
gpt4 key购买 nike

本地存储代理似乎在 Extjs 4.1 中有相当多的错误。请告诉我我做错了什么。

我正在尝试(像其他人一样)从服务器加载数据,然后将其存储在本地以供离线使用。我的问题涉及刷新数据(在浏览器中点击重新加载)。 removeAll()不删除任何记录。我读到你可以通过调用 clear() 来清除本地存储。在本地存储代理本身上。删除记录时,不会重置 key 生成器。我担心这最终会导致问题。

在我的代码中,我在做什么会导致 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();

本地存储代理写入我的浏览器的内容:

First load

第二次重新加载确实如此。它不会删除以前的:

Second load.  Frist load data isn't removed.

如果我尝试使用 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();

the counter isn't reset!

谢谢你的眼球。

更新

我已经能够通过在实例化我的本地存储之前直接重置值来重置本地存储的计数器。显然,这超出了预订范围,因此并不理想。
window.localStorage.setItem('cloud-conditions-counter',0);

var offline = Ext.create('MAP.store.LocalCloudConditionStore');

offline.getProxy().clear();

更新 DEUX

经过进一步思考,我认为不重置计数器是正确的。当 mysql 中的表被截断时,您不会重置序列号。如果使用已删除记录的某些缓存 id(假设 id 为 1)从表中提取数据,这可能会导致问题。将返回一条完全不同的记录,而不是被删除的记录。好吧,有道理。

不过,为什么不 store.removeAll(); store.sync()工作?

最佳答案

我不确定这是一个错误,但我确定 removeAll()不会将记录标记为已删除,并且不会影响远程或本地存储(即,后续同步不会做任何事情)。这与 remove() 形成对比。 - 实际上是这样做的。

您可以使用此方法删除所有记录:

Ext.override(Ext.data.Store), { 

removeAllForReal: function() {
records = this.data.items,
i = records.length;

while (i--) {
this.remove( records[i] );
}
}
});

关于local-storage - Extjs4 localstorage -- 如何删除所有记录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11035422/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com