我正在尝试使用索引数据库进行简单的应用程序。我想在一个对象存储中存储多个项目。可能吗?我尝试了类似的东西,但它不起作用:
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
问题,但是如果您在name
或description
上有一个键,它只会替换现有对象而不是添加新对象。您想使用 add
而不是 put
。
关于HTML5Rocks的例子,要记住的一件事是,目前它们只能在Chrome中工作(碰巧有一个滞后的IndexedDB实现)。
FWIW,一个小提示是这里的JavaScript中有一个错误(Desp var之后的额外逗号),这可能会阻止它在IE10中运行:
var data = {
"name": Name,
"description": Desp,
};