我正在尝试使用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/
的样本答案 0 :(得分:3)
定位“只是”IndexedDB会将兼容客户端缩小到chrome和firefox用户。看一下JayData,它支持你的对象存储模式,带有一个回退提供者列表选项:如果客户端有IndexedDB,它将被使用,但如果只有WebSQL客户端有什么(95%的移动设备)那么将使用webSQL。
此外,语法更容易存储或检索,请检查ToDo list example,这也会显示回退提供程序选项。
答案 1 :(得分:1)
IndexedDB对象存储库旨在容纳多个对象,并让您在其属性中进行光标处理。
目前尚不清楚导致put
问题的确切原因,但如果您在name
或description
上有密钥,则只会替换现有对象而不是添加新对象。您希望使用add
代替put
。
关于HTML5Rocks示例要记住的一件事是,目前它们只适用于Chrome(恰好有一个落后的IndexedDB实现)。
FWIW,一个小技巧是你的JavaScript中有一个错误(Desp var之后的额外逗号)可能会阻止它在IE10中运行:
var data = {
"name": Name,
"description": Desp,
};