IndexedDB: получить внешний ключ, связанный с конкретным объектом в хранилище объектов
Скажем, у меня есть хранилище объектов, которое было создано так:
IDBDatabase.createObjectStore
(Name, {autoIncrement: true });
Теперь, скажем, я получаю объект из этого хранилища объектов, используя index
посмотреть это.
Есть ли способ, которым я могу получить внешний ключ, связанный с объектом, чтобы я мог изменить / удалить его с IDBObjectstore.put()
/ IDBObjectstore.delete()
или я застрял итерируя по хранилищу объектов с курсором (сравнение на основе некоторого произвольного свойства) и используя cursor.update()
/ cursor.delete()
?
Первоначально я бы подумал, что нет, потому что смысл наличия определенных ключей состоит в том, что два идентичных объекта могут находиться в хранилище объектов, поэтому браузер не может знать, какой объект дать вам, когда он предоставляется только самим объектом. Предположительно, хотя, так как я сначала извлек его с индексом, может быть какой-то способ использовать индекс для извлечения ключа вне строки, который связан с объектом, с которым я работаю.
2 ответа
Когда данные вставляются в хранилище данных, возвращаемый объект события содержит информацию о ключе, используемом для вставки данных. Это можно получить с помощью event.target.result
, Вы можете собрать информацию в это время.
Будь то встроенные ключи или внешние ключи, вы можете получить их одинаково.
var transaction = DB_HANDLER.transaction([tableName], "readwrite");
var objectStore = transaction.objectStore(tableName);
var request = objectStore.add(data);
request.onsuccess = function(event) {
console.log("Key used for inserting data = " + event.target.result);
};
Вы должны сохранить сгенерированный вне линии ключ, когда вы положите. Это в результате события запроса успеха.