0

我正在尝试使用索引数据库做简单的应用程序。我想将多个项目存储在一个 objectStore 中。是否可以?我尝试了类似的方法,但它不起作用:

    itemsDB.indexedDB.addTodo = function(Name, Desp) {
    var db = itemsDB.indexedDB.db;
    var trans = db.transaction(['items'], IDBTransaction.READ_WRITE);
    var store = trans.objectStore("items");

    var data = {
      "name": Name,
      "description": Desp, 

    };

    var request = store.put(data);
   } 

我使用了来自http://www.html5rocks.com/en/tutorials/indexeddb/todo/的示例

4

2 回答 2

3

定位“仅”IndexedDB 会将您的兼容客户端缩小到 chrome 和 firefox 用户。看看JayData,它支持您的对象存储模式,并带有一个备用提供程序列表选项:如果客户端有 IndexedDB,它将被使用,但如果只有客户端拥有的 WebSQL(95% 的移动设备),那么将使用 webSQL .

此外,语法更容易存储或检索,检查ToDo 列表示例,这也显示了后备提供程序选项。

于 2012-05-16T07:24:54.857 回答
1

IndexedDB 对象存储旨在容纳多个对象,并让您可以在它们的属性上进行光标移动。

目前尚不清楚究竟是什么导致了您的put问题,但是如果您在其中一个上有一个键,name或者description它将只是替换现有对象而不是添加新对象。您想使用add而不是put.

关于 HTML5Rocks 示例要记住的一件事是,目前它们只能在 Chrome 中工作(恰好有一个滞后的 IndexedDB 实现)。

FWIW,一个小提示是您的 JavaScript 中有一个错误(Desp var 后的额外逗号),这可能会阻止它在 IE10 中运行:

var data = {
      "name": Name,
      "description": Desp, 

    };
于 2012-05-14T05:29:34.217 回答