Extjs 4.1では、ローカルストレージプロキシはかなりバグがあるようです。私が何か間違ったことをしていると言ってください。
私は(他の人と同じように)サーバーからデータをロードし、オフラインで使用するためにローカルに保存しようとしています。私の問題は、データの更新(ブラウザでリロードを押す)に関係しています。 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();
ローカルストレージプロキシがブラウザに書き込む内容:
そして、2回目のリロードは行います。以前のものは削除されません:
を使用しようとする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();
あなたの眼球をありがとう。
アップデート
ローカルストアをインスタンス化する前に値を直接リセットすることで、ローカルストレージのカウンターをリセットすることができました。明らかに、これは予約から外れるので、理想的ではありません。
window.localStorage.setItem('cloud-conditions-counter',0);
var offline = Ext.create('MAP.store.LocalCloudConditionStore');
offline.getProxy().clear();
UPDATE DEUX
さらに考えてみると、カウンターをリセットしないのが正しいと思います。mysqlのテーブルが切り捨てられた場合、シーケンス番号はリセットされません。削除されたレコードのキャッシュされたID(たとえば、IDが1)を使用してテーブルからデータをプルした場合、問題が発生する可能性があります。削除されたレコードではなく、まったく異なるレコードが返されます。わかりました、理にかなっています。
それでも、なぜ一体が機能しないstore.removeAll(); store.sync()
のですか?