1

簡単なメモ帳アプリケーションを作成して、IndexedDB の基本を学ぼうとしています。この環境で順序付きリストを使用するのに問題があります。

実装方法がわからない機能は、順序付けられたメモのリストです。

最初に WebSQL でメモ帳アプリケーションを実装してみましたが、次のようにメモを簡単に選択できることがわかりました。

select * from notes order by position

そして、指定した位置に音符を挿入する際、まずやったのは……

update notes set position = position + 1 where position >= insert_position

...各ノートをシフトして、位置に新しいノート用のスペースを作りますinsert_position

しかし、WebSQL は実際には非推奨であることがわかりました。

IndexedDB でそのような機能を実現する可能性は何ですか? 上記のような簡単なクエリは適用できないため、IndexedDB などの環境で順序付きリストを作成する方法がよくわかりません。

ちなみに、IndexedDB に配列を格納できることはわかっていますが、その場合、毎回使用するレコードが 1 つだけになります。私はむしろ、すべてのレコード (各レコードがメモを表す) の順序付けられたリストを何らかの形で作成し、順序を更新できるようにする方法を探しています (上記のシフトクエリのように)。

順序付けられたリストの IndexedDB の方法に光を当てることができますか?

4

1 に答える 1

2

多くのものと同様に、このナットを割る方法はいくつかあります。

作成時間に基づいてメモを並べ替えるアプリを作成する場合は、自動インクリメントキーを使用するのと同じくらい簡単です(このフラグはobjectStore作成時に指定されます)。id(別名primaryKey)が1、2番目が2などであることに注意してください。これはデフォルトを使用するkeyPathため、インデックスを作成せずにカーソルを開くことができます。

時間通りに変更されるなど、変更される可能性のあるものでメモを並べ替えるには、そのフィールドにインデックスを作成し、いつaddingまたはputtingオブジェクトを指定するようにしてください。0たとえば、 (辞書式順序のキーはこれがすべての文字列の前に来ることを意味します)の下限でカーソルを開き、上限を開いたままにします。onsuccess次に、カーソルを使い果たしてnullが返されるまで、各行を1つずつ起動ハンドラーにカーソルを合わせますevent. target.result

「位置」や順序などのフィールドを探しているようです。これは、上記のように、通常のインデックスとカーソルで完全に実行できます。アドバイスの1つの注意点は、positionフィールドを整数ではなく浮動小数点数にすることです。前者のように、他の行を変更せずに順序を更新できます(position n = ( ( position 1 + position 2 ) / 2 ))。

于 2012-04-09T23:29:56.520 に答える