0

objectStore にエントリが既に存在するかどうかを確認しようとしています。エントリが存在する場合、そのフィールドのいくつかを変更する必要があります。エントリが存在しない場合は、追加する必要があります。

これが私のクエリです:

var db = html5rocks.indexedDB.db;
  var trans = db.transaction(["topics"], "readwrite");
  var store = trans.objectStore("topics");
  var findRequest = store.get(tHash);
findRequest.onsuccess = function(event){
  console.log("logging event");
  console.log(event);
  var cursor = event.target.result;
}
findRequest.onerror(e){
console.log(e);
}

私が経験している問題は、findRequest.onsuccess関数が常に起動することです-リクエストが何かを見つけることは不可能ですがget(tHash)(ちなみに、これを行うと、「トピック」objectStore にはゼロのエントリが含まれます...)。onsuccess関数と関数を使用してonerror、既存のレコードを更新する必要があるか、新しいレコードを作成する必要があるかを判断します。私は何を間違っていますか?

4

1 に答える 1

5

馬の口から直接:

IDBObjectStore.get()指定されたキーを持つレコードが存在しない場合は、レコードが存在する場合と同じ結果になりますが、値として未定義です。2 つの状況を区別する必要がある場合はopenCursor、同じキーを使用できます。これは、レコードが存在する場合は未定義の値を持つカーソルを返し、そのようなレコードが存在しない場合はカーソルを返しません。

次のようなものが欲しいと思います:

var cursorRequest = store.openCursor(tHash);
cursorRequest.onsuccess = function(event) {
  var cursor = event.result;
  if (cursor) {
    // entry exists
  } else {
    // entry doesn't exist
  }
}    
于 2012-11-13T22:18:41.200 に答える