私は頭をIndexedDBに巻き込もうとしています。
キー パスのないキージェネレーターを使用するオブジェクト ストアを作成しました。
var objectStore = db.createObjectStore("domains", {autoIncrement: true });
objectStore.createIndex("domain", "domain", { unique: true, multiEntry: true });
レコードにアクセスするために、オブジェクト ストアを参照するインデックスを作成しました。インデックスのキー パスは、domain
私のレコードのプロパティです。
以下は、私のオブジェクト ストア内の 1 つのレコードがどのように見えるかの例です。
{ domain: ["stackexchange",
"stackoverflow",
"superuser",
"askubuntu",
"serverfault"],
bold : ["<strong>",1],
italic : ["<em>",1],
strikethrough : ["<del>",1],
superscript : ["<sup>",1],
subscript : ["<sub>",1],
heading1 : ["<h1>",1],
heading2 : ["<h2>",1],
heading3 : ["<h3>",1],
blockquote : ["<blockquote>",1],
code : ["<code>",1],
newline : ["<br>",2],
horizontal : ["<hr>",2]
},
プロパティに表示される各エントリdomain
は、オブジェクト ストアのすべてのレコードのすべてのドメイン キーの値の和集合で構成されるセットの中で一意であることが保証されています。IE これらのドメインは、私のオブジェクト ストアのどこにもありません。
ユーザーがオブジェクト ストア内のオブジェクトを編集できるようにする必要があります。ドメインが 1 つあれば、関連付けられたオブジェクトを次のように取得できます。
var DBOpenRequest= window.indexedDB.open(db_name, db_version);
DBOpenRequest.onsuccess= function(event){
var db= DBOpenRequest.result;
var domains=db.transaction('domains', 'readwrite').objectStore('domains');
var query = domains.index("domain").get("stackoverflow");
};
さて、ここが私が混乱している部分です。ユーザーが編集したいプロパティを変更したり、新しいプロパティを追加したりしたら、上記で取得したオブジェクトをユーザーが作成した新しいオブジェクトに置き換えて、変更を保存する必要があります。(または、元のオブジェクトを変更して変更を保存します)。
私はこれを行うために使用IDBObjectStore.put()
する必要があると思います。
このput()
メソッドは 2 つのパラメーターを受け取ります。1 つは必須で、もう 1 つはオプションです。
value
The value to be stored.
key
The key to use to identify the record. If unspecified, it results to null.
2 番目のパラメーターは、インライン キーを使用しているインスタンスではおそらくオプションです。キージェネレーターで生成されたアウトオブラインキーを使用しています。
インデックスを介して取得したオブジェクトの (自動生成された、行外の) キーを取得する方法1?
これについて私が行くべき別の方法はありますか?