アップグレード イベント中に IndexedDB に渡される一連の JSON データを作成しました。一見問題のない非常に優れた IndexedDB データベースが作成されます。問題は、データベースをバージョン 1 から 2 にアップグレードすると、JSON をループして適用するだけなので、既存のデータがすべて上書きされることです。
一意のキーを持たない新しいデータベース項目が何も書き込まないようにするために、アップグレードには何らかの方法が必要です。どうすればいいですか?以下は現在のデータを上書きするだけです。
objectStore = event.currentTarget.transaction.objectStore('player');
objectStore.put({ key: 'non unique, but I replace my twin\'s data anyway', data: value });
助けてくれてありがとう、すべてを検索しましたが、この問題の解決策が見つかりません。
編集2012 年 8 月 24 日
情報を確認するために get を使用するというクリストフの推奨に従って、私は少し掘り下げて調査しました。答えを見つけた後、私はあなたを助けるためにいくつかの疑似コードを書くことにしました.
// Create the get request inside your upgrade
var tableData = event.currentTarget.transaction.objectStore('your table name');
var getData = tableStore.get('your key');
// Run the get request
getData.onsuccess = function (e) {
var result = e.target.result;
// Immediately exit if the current result is not undefined
if (result !== undefined) {
return;
}
// Note, you may or may not need a closure to write data in the callback
// See here for more info on closures in events http://stackoverflow.com/questions/3495679/passing-parameters-in-javascript-onclick-event#answer-3495722
tableStore.add('data to add');
};