このコード スニペットの何が問題なのかわかりません。indexedDB インスタンスがあります。keyPath は自動生成されます。オブジェクトを DB に正常に追加し、DB 内のすべてのオブジェクトを取得できますが、作成したインデックス内のオブジェクトを正常に検索できません。
私のjsfiddleを参照してください:http://jsfiddle.net/R5ngM/13/
このコード スニペットの何が問題なのかわかりません。indexedDB インスタンスがあります。keyPath は自動生成されます。オブジェクトを DB に正常に追加し、DB 内のすべてのオブジェクトを取得できますが、作成したインデックス内のオブジェクトを正常に検索できません。
私のjsfiddleを参照してください:http://jsfiddle.net/R5ngM/13/
まだ完全には解決していませんが、インデックスではなくオブジェクト ストアでカーソルを開いていることが問題のようです。デフォルトの keyPath では正常に機能しますが、セカンダリ インデックスを使用しようとすると機能しません。
あなたがやろうとしていることは次のようになるはずです:
var request = null;
if ( null === index || 'undefined' === typeof index ) {
request = transaction.openCursor( keyRange );
} else {
request = index.openCursor( keyRange );
}
request.onsuccess = on_success;
更新:インデックスカーソルで上記の問題を見つけた後、間違った場所を探すのに多くの時間を費やしました。問題は次のとおりです。格納しているオブジェクトは、オブジェクト リテラルではなく配列です。
私はあなたが保存していたオブジェクトを調べていて、これに気づきました:
var entry = '<li>'+row[0].fname+' '+row[0].lname+'</li>';
配列の最初の要素にどのようにアクセスしているかがわかりますrow
か? 配列を格納しています。あなたのキーパス (および私) は、オブジェクトが格納されていると想定していました。配列にインデックスを付けることは可能だと思いますが、いずれにしてもkeyPath
オフです。
これは、作業コードのほぼ同様のチャンクです。デバッグ中に少しいじりましたが、要点はわかります。(これは素晴らしいスニペットなので、よろしければ、後で他の StackOverflow の例のベースとして使用します。)
上記の回答で説明したように、カーソルをインデックスの上に置いてください。次に、次の行に変更します。
var entry = '<li>'+row[0].fname+' '+row[0].lname+'</li>';
そして、これを変更します:
var newUser = [{fname:$('#fname').val(),lname:$('#lname').val()}];
これに:
var newUser = {fname:$('#fname').val(),lname:$('#lname').val()};
上記の問題は、インデックス上でカーソルを開いたときにも発生する可能性があることに注意する必要があります。インデックスでカーソルを開いても常に null になる場合は、インデックスを作成したデータ型と、インデックス カーソルを作成しているデータ型を再確認する必要があります。私の場合、文字列データ型でインデックスを作成し、int でインデックスのカーソルを開いていたので、気が狂いそうになりました。