使用autoIncrement时删除IndexedDB中的项目

时间:2013-01-15 02:25:56

标签: javascript firefox indexeddb

我正在尝试实施此example

在我尝试删除某个项目之前,一切正常。

使用此:

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)是正确的实现。

以下是示例的pastebin

使用Firefox 18

1 个答案:

答案 0 :(得分:3)

由于您使用的是autoIncrement键,因此密钥由用户代理生成。在FF和Chrome中,它是从1开始的整数。如果您提供有效密钥并将id转换为整数,则代码运行正常。我在FF和Chrome(dartium)中测试过。根据IndexedDB API密钥定义,'1'1是不同的密钥。

另一个问题是IndexedDB API设计。删除方法总是return to success事件处理程序undefined,结果是否删除了给定的密钥。因此调试非常困难。我认为至少应该返回已删除记录的数量。

[编辑]修改代码:http://pastebin.com/mLpU0VfP
[编辑...也]注意将+转换为string的{​​{1}} integer