0

この例を実装しようとしています。

特定のアイテムを削除しようとするまで、すべてが正常に機能します。

これを使用して:

request.onupgradeneeded = function(event) {
      console.log("upgrade", event);

      db = event.target.result;
      console.log("db", db);

      if (!db.objectStoreNames.contains("chatBot")) {
        var objectStore = db.createObjectStore("chatBot", {keyPath: "timeStamp", autoIncrement: true});
      }
    };

および削除の設定:

btnDelete.addEventListener("click", function() {
      var id, transaction, objectStore, request;

      id = document.getElementById("txtID").value;
      console.log("id", typeof id);

      transaction = db.transaction("people", "readwrite");
      objectStore = transaction.objectStore("people");
      request = objectStore.delete(id);
      request.onsuccess = function(evt) {
        console.log("deleted content");
      };
    }, false);

indexedDB にアイテムを追加しても問題はありませんが、何らかの理由でアイテムを削除できない理由がわかりません。

id文字列でありobjectStore.delete(id)、正しい実装です。

ここに例のペーストビンがあります

Firefox 18 の使用

4

1 に答える 1

4

autoIncrement キーを使用しているため、キーはユーザー エージェントによって生成されます。FF と Chrome では、1 から始まる整数です。有効なキーを指定idして整数に変換すると、コードは正常に実行されます。FF と Chrome (dartium) の両方でテストしました。'1'および1IndexedDB API キー定義によると、異なるキーです。

もう 1 つの問題は、IndexedDB API の設計です。削除メソッドは、指定されたキーが削除されたかどうかに関係なく、結果として常に成功イベント ハンドラーに戻ります。undefinedそのため、デバッグが非常に困難です。少なくとも削除されたレコードの数を返す必要があると思います。

[編集] mod コード: http://pastebin.com/mLpU0VfP
[編集... また]+をに変換するstringことに注意してくださいinteger
request = db.transaction("people", "readwrite").objectStore("people").delete(+id);

于 2013-01-15T03:39:58.653 に答える