Как мне обновить запись в indexedDB без создания новой записи - PullRequest
0 голосов
/ 11 июня 2019

Я создаю базовое приложение для контактов, чтобы узнать об 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");
            };

        };

    };

};

Я ожидаю, что запись со значением имени "Джедидия" будет изменена на "Иети"но вместо этого он создает новую запись в БД с теми же значениями, что и" Джедидия ", но с именем и keyPath, равным" Иети "

1 Ответ

1 голос
/ 12 июня 2019

Метод put () интерфейса IDBObjectStore обновляет данную запись в базе данных или вставляет новую запись, если данный элемент еще не существует.Но если вы хотите обновить какое-либо свойство хранимых данных, как в вашем случае, вы должны использовать update api.

Вот документ для пут api - https://developer.mozilla.org/en-US/docs/Web/API/IDBObjectStore/put

Вот документ для обновленияAPI - https://developer.mozilla.org/en-US/docs/Web/API/IDBCursor/update

...