2014-12-31 1 views
0

제 코드에서 도움이 될 수 있습니다. 내 웹 응용 프로그램에 색인화를 사용하고, 나는 두 objectStore 만들었습니다 - companyToCall 은 - auto_increment 키를 사용하여 IndexedDB에서 객체를 삭제할 수 없습니다.

모두 (내가 만든 한 JS에서 사용자 정의 클래스) 회사 객체를 포함

을 companyCalled. 예를 들어 당신이 ID를 25 이후 회사를 삽입,

databaseOpeningRequest.onupgradeneeded = function(event) 
{ 
    db = event.target.result; 
    db.createObjectStore('companyToCall', { autoIncrement: true }).createIndex("id", "id", { unique: true}); 
    db.createObjectStore('companyCalled', { autoIncrement: true }).createIndex("id", "id", { unique: true}); 
} 

나는 데이터베이스에 삽입의 순서를 기억하고 싶어하기 때문에 DB의 핵심으로 Company.id를 사용하지하기로 결정했습니다 다음은 스키마를 간다 20 번, 30 번 키가 필요합니다. 회사 25 -> 1/회사 20 -> 2/회사 30 -> 3

이러한 회사는 모두 CompanyToCall 저장소에 처음 삽입됩니다. 내가 CompanyCalled 저장소에 넣고 CompanyToCall 저장소에서 삭제하려고합니다.

불행히도 CompanyToCall 저장소에서 삭제가 작동하지 않아 그 이유를 알 수 없습니다. 여기 은 삭제입니다 :

var removeCompanyFromToCallStorage = function(company) 
{ 
    if (activateLocalStorage) 
    { 
     var requete = db.transaction(['companyToCall'], 'readwrite').objectStore('companyToCall').delete(company.getId()); 
     requete.onsuccess = function(e) 
     { 
      console.log('worked'); 
     }; 
    } 
}; 

내가 가진 내 콘솔에서 "작업"하지만 난 내 DB를 확인하고있을 때 나는 아직도

(등 등 새로 고침 후) 잘못된 저장소에이 회사를 볼 수 있습니다 누구 아이디어가 있습니까?

답변

1

먼저 id로 개체를 참조하기 위해 개체 저장소를 만들 때 keypath를 지정해야합니다. keypath는 일반 관계형 테이블의 레코드 기본 키와 같습니다. keypath를 사용하는 것은 선택 사항입니다. 현재 기본 키가 정의되어 있지 않으므로 기본 키를 나타내는 개체의 필드를 지정하지 않고 기본 키 삭제 작업을 수행하는 것은 의미가 없습니다. db.createObjectStore('companyToCall', { autoIncrement: true })...db.createObjectStore('companyToCall', {keyPath: 'id', autoIncrement: true})...으로 변경하여 keypath를 정의 할 수 있습니다. 자세한 내용은 IDBDatabase.createObjectStore을 참조하십시오.

둘째, IDBObjectStore.prototype.delete은 개체 저장소 내의 개체가 수정되었는지 여부에 관계없이 성공 이벤트를 발생시킵니다. indexedDB의 많은 작업은 실제로 발생한 작업과 상관없이 성공 이벤트를 시작합니다. 기본적으로 성공은 수행 할 작업을 올바르게 요청했으며 작업이 완료되었음을 의미합니다. 그것은 수술이 무언가를 한 것을 의미하지는 않습니다. 이것이 '작업 한'이 항상 콘솔에 표시되는 이유입니다. 불행하게도, 객체가 실제로 삭제되었는지 여부를 감지하는 간단한 방법은 없습니다. '작업 한'대신 '삭제할 성공적으로 요청한 개체'와 같은 내용 만 인쇄 할 수 있지만 나중에 요청을 확인하여 확인하지 않는 한 요청이 실제로 수행되었는지 여부는 알 수 없습니다.

관련 문제