2

indexeddbaddtransactionの前にコールバック関数を設定する際に問題が発生します

os = ...the object store (IDBObjectStore) object assigned here
os.onsuccess = function(){alert('dont mess with Messi')}
os.add({name:'Lionel Messi',team:'FC Barcelona',position:'striker',number:10});

エントリはオブジェクトストアに正常に追加されましたが、成功イベントの関数は起動されません。onerrorと呼ばれる別のイベントがあります。代わりに使用する必要がありますか?私はそうは思わない

「エラー部分を教えてもらえますか?」と聞かないでください。エラーがまったくないからです

4

2 に答える 2

2

あなたは間違った方法であなたの要求に取り組んでいます。onsuccessオブジェクトに属性を追加するだけなので、エラーは発生しません。

オブジェクトストアにコールバックを追加するのではなくonsuccess、でトランザクションを開き、objectStoreそのトランザクションにリスナーを追加します。

インデックスとトランザクションを使用した実際の例については、最近別のStackOverflowerで作業していたこのjsfiddleを確認してください。*より複雑な例については、私のIndexedDBライブラリを参照してください。

*このフィドルは古い(2011年12月以前)ChromeIDB実装に書き込まれていることに注意してください。新しい(FF)実装はonupgradeneededコールバックを使用しますが、それ以外はほぼ同じです。

于 2012-06-22T02:45:01.333 に答える
1

間違ったオブジェクトへのハンドラーの割り当て、onsuccess、onerror、onabortハンドラーは、オブジェクトストア自体ではなく、トランザクションによって起動されるように見えるため、コードは次のようになります。

transaction = database.transaction([storeName], IDBTransaction.READ_WRITE);
 ..
 ..
os = transaction.objectStore(storeName);
transaction.oncomplete = function(e) { //do your stuff here } ;
os.add({ id : 1, name : 'John Doe'});

コードを投稿できますか、オブジェクトストアをどのように取得していますか、トランザクションから推測します(他の方法はわかりません)。上記のコードが機能するかどうかをお知らせください。挿入するオブジェクトには、オブジェクトストアを作成するときにobjectStoreのキーとして定義されたプロパティが必要であることに注意してください。

于 2012-06-21T19:38:01.703 に答える