我正在创建一个基本的联系人应用程序,以了解IndexedDB及其使用方法。我已经阅读了Mozilla开发人员指南,其中提到了更新条目,但它似乎对我不起作用。任何帮助将不胜感激。谢谢
成功处理者
let dbObject = window.indexedDB.open( 'contacts' );
需要.onupgrade的代码
let peopleOS = db.createObjectStore( 'people', { keyPath: "name", autoIncrement: false } );
dbObject.onsuccess = e => {
// Retreive database
let db = event.target.result;
/*
* ---------------------------
* Add one person to database
* ---------------------------
*
* Create Transaction
* Select Object Store
* Add Person
*/
let trxn = db.transaction( ['people'], 'readwrite' );
let store = trxn.objectStore( 'people' );
store.add( { name: "Jedidiah", age: 20 } );
store.add( { name: "Mario", age: 127 } );
trxn.oncomplete = () => {
let trxn = db.transaction( ['people'], 'readwrite' );
let store = trxn.objectStore( 'people' );
// Update
let request = store.get("Jedidiah");
request.onsuccess = (event) => {
let data = event.target.result;
// Update name to "Ieti"
data.name = "Ieti";
let result = store.put( data );
result.onsuccess = () => {
alert("Value updated");
};
};
};
};
我希望将名称为“ Jedidiah”的条目更改为“ Ieti”,但它将在数据库中创建一个与“ Jedidiah”相同的值但名称和keyPath为“ Ieti”的新条目>
答案 0 :(得分:1)
IDBObjectStore接口的put()方法更新数据库中的给定记录,或者如果给定项不存在则插入新记录。但是,如果要像您的情况那样更新存储数据的某些属性,则应使用update api。
以下是put api的文档-https://developer.mozilla.org/en-US/docs/Web/API/IDBObjectStore/put
以下是更新API的文档-https://developer.mozilla.org/en-US/docs/Web/API/IDBCursor/update