IndexedDBの概念とAPIを学習しようとしていますが、IDBObjectStore.addメソッドを使用してobjectStoreのキーを指定する方法を理解しようと苦労しています。仕様によると、最初のパラメーターは値であり、2番目のオプションのパラメーターはキーです。値のプロパティとしてBarを持つオブジェクト(オブジェクト)を指定するとレコードを追加できますが、2番目のパラメーターを介してオブジェクトを介してキーを渡そうとすると、追加の試行が失敗し、詳細が表示されます私が得るものは次のとおりです。
コード:5。メッセージ:DataError:DOM IDBDatabase例外5。名前:DataError。スタック:エラー:提供されたデータが要件を満たしていません。IDBOpenDBRequest.dbOpenRequest.onsuccesで
コードサンプルは以下のとおりです。
var dbOpenRequest = window.indexedDB.open("sandbox")
dbOpenRequest.onupgradeneeded = function (event) {
var db = dbOpenRequest.result;
var fooObjStore = db.createObjectStore("Foo", {
keyPath: "Bar",
autoIncrement: false
});
}
dbOpenRequest.onsuccess = function (event) {
var db = dbOpenRequest.result;
var transaction = db.transaction(["Foo"], "readwrite");
transaction.oncomplete = function () {
console.log("Transaction complete");
}
transaction.onerror = function (event) {
console.error("Transaction error! " + event.target.webkitErrorMessage);
}
var fooObjStore = transaction.objectStore("Foo");
try {
//Works
var fooRequest = pipelineObjStore.add({ data: "myData", Bar: "1" });
//Fails
fooRequest = pipelineObjStore.add({ data: "myData" }, "2" );
//Fails
fooRequest = pipelineObjStore.add({ data: "myData" }, { Bar: "3" });
}
catch (e) {
console.error("Code: " + e.code
+ ". \nMessage: " + e.message
+ ". \nName: " + e.name
+ ". \nStack: " + e.stack);
}
fooRequest.onsuccess = function (event) {
console.log("Pipeline request successful");
}
fooRequest.onerror = function (event) {
console.error("Pipeline request error. " + event.target.webkitErrorMessage);
}
}
dbOpenRequest.onerror = function (event) {
console("Error ");
}
私が最終的にやりたいのは、その値の文字列を持つobjectStoreを作成し、キーを個別に提供することです。これを行うことは可能ですか、それともプロパティの一部として文字列データを含むオブジェクトと、キーを持つ別のプロパティを提供する必要がありますか?