업그레이드 이벤트 중에 IndexedDB로 전달되는 JSON 데이터 집합을 만들었습니다. 그것은 겉으로보기에는 문제가없는 아주 멋진 IndexedDB 데이터베이스를 생성합니다. 문제는 데이터베이스를 버전 1에서 2로 업그레이드 할 때 JSON을 반복하고 적용하기 때문에 모든 기존 데이터를 덮어 씁니다.업그레이드 도중 IndexedDB가 값을 덮어 씁니다.
고유 키가없는 새 데이터베이스 항목이 아무 것도 쓰지 못하게하려면 업그레이드하는 방법이 있어야합니다. 어떻게하면 좋을까요? 다음은 현재 데이터를 덮어 쓰는 것입니다.
objectStore = event.currentTarget.transaction.objectStore('player');
objectStore.put({ key: 'non unique, but I replace my twin\'s data anyway', data: value });
감사합니다. 사전에 도움을 주셔서 감사 드리며 모든 문제를 해결할 수 없습니다. 2012년 8월 24일
편집 정보를 확인할 수 사용의 크리스토프의 권고에 따라, 나는 파고 및 연구의 조금을했다. 대답을 찾은 후에 당신을 도울 수있는 가짜 코드를 작성하기로 결정했습니다.
// 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');
};
get을 제외한 모든 옵션을 시도했습니다. 그래서 나는 get.success = '이것을 쓰지 마라'; get.error = '이것을 써라'; 나는 그것이 벌써 존재하지 않는다면 그것은 불쾌한 오류를 일으킬 것이라고 추측하고있다. –
다음과 같이하십시오. get.success = function (e) {if (! get.result) {// insert}}. 이것은 효과가있다. 마지막 옵션을 선호합니다. 가능한 버전의 DB도 가능합니다 ... –
데이터베이스와 0 또는 아무것도 체크하지 않으면 한 번만 업그레이드 할 수 있습니다. 가능하면 여러 버전을 업그레이드 할 수 있어야합니다. 사용하기에 스윙을 취하기 위해가는 것이 이번 주말에 열쇠가 있는지 확인하십시오. –