一个对象存储中的多个项目



我正在尝试使用索引数据库进行简单的应用程序。我想在一个对象存储中存储多个项目。可能吗?我尝试了类似的东西,但它不起作用:

    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/的样本

Targeting"just"IndexedDB会将兼容客户端缩小到chrome和Firefox用户。看看JayData,它支持你的对象存储模式,并有一个回退提供程序列表的选项:如果客户端有IndexedDB,它将被使用,但如果只有WebSQL,客户端拥有的(95%的移动设备),那么webSQL将被使用。

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

IndexedDB 对象存储旨在容纳多个对象,并允许您将光标游标在它们的属性上。

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

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

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

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