一个objectStore中的多个项目

时间:2012-05-12 11:51:36

标签: html5 indexeddb jaydata

我正在尝试使用Indexed DB进行简单的应用程序。我想在一个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/

的样本

2 个答案:

答案 0 :(得分:3)

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

此外,语法更容易存储或检索,请检查ToDo list example,这也会显示回退提供程序选项。

答案 1 :(得分:1)

IndexedDB对象存储库旨在容纳多个对象,并让您在其属性中进行光标处理。

目前尚不清楚导致put问题的确切原因,但如果您在namedescription上有密钥,则只会替换现有对象而不是添加新对象。您希望使用add代替put

关于HTML5Rocks示例要记住的一件事是,目前它们只适用于Chrome(恰好有一个落后的IndexedDB实现)。

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

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

    };