7
に基づいのIndexedDBで複数のレコードを削除する:は(を装備(異なる機器、主キーtagNoを表す)とequipParts機器の一部の部分を表し、タグ番号/シリアル番号、プライマリキーseqNoに基づいて、フィールドがタグNoであるインデックスを持ち、その一部がその一部である)。私はのIndexedDBを使用していると私は、2つのオブジェクトストアを有する指標
私はを装備でレコードを削除した場合、私はequipParts のtagNoベアリングのすべてのレコードを削除するには、(単に「ここでequipParts.tagNo = equip.tagNo」のような)を装備します。私のコードから
抜粋:
var tx = db.transaction(["equip", "equipParts"],"readwrite");
var estore = tx.objectStore("equip");
var pstore = tx.objectStore("equipParts");
var tagIndex = pstore.index("by_tagNo");
var pdestroy = tagIndex.openCursor(IDBKeyRange.only(tagno)); //opens all records bearing the selected tag number
pdestroy.onsuccess = function() {
var cursor = pdestroy.result;
if (cursor) {
if (cursor.value.tagNo == tagno) {
pstore.delete(cursor.value.seqNo); //I guess I'm wrong here
}
cursor.continue;
}
}
pdestroy.onerror = function() {
alert("Deletion attempt NG");
}
var ereq = estore.delete(tagno);
ereq.onsuccess = function(e) {
alert("Form deletion OK");
window.location = "index.html";
}
ereq.onerror = function(e) {
alert("Form deletion NG");
window.location = "index.html";
}
db.close();
問題が装備で唯一のレコードが削除されていることです。レコードはのequipPartsにとどまります。一意ではないインデックス(親オブジェクトストアの主キー)に基づいてIndexedDBオブジェクトストア内の複数のレコードを削除する方法はありますか?
なぜ二つ目は効率的ではないでしょうか? –
'openCursor'は' IDBCursorWithValue'を返します。これはレコードの値を読み取る必要がありますが、最初のレコードはレコードの値を持たない 'IDBCursor'を返します。 –
ありがとうございます。それは本当ですか?後で、同じトランザクション内で全体の削除が行われますか? –