我正在创建一个基本的联系人应用程序来了解 IndexedDB 以及如何使用它。我已经阅读了 Mozilla 开发人员指南,其中提到了更新条目,但它似乎对我不起作用。任何帮助将不胜感激。谢谢
成功处理程序
let dbObject = window.indexedDB.open( 'contacts' );
.onupgradeneeded 的代码
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”
最佳答案
IDBObjectStore 接口(interface)的 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
关于javascript - 如何在不创建新条目的情况下更新 indexedDB 中的条目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56543234/