2012-04-08 8 views
1

Ich versuche, die Grundlagen von IndexedDB zu lernen, indem Sie eine triviale Notepad-Anwendung erstellen. Ich habe Schwierigkeiten, eine geordnete Liste in dieser Umgebung zu verwenden.Verwenden einer geordneten Liste in IndexedDB

Das Feature, das ich nicht sicher bin, wie man es implementiert, hat eine geordnete Liste von Notizen.

ich in WebSQL zunächst versucht, den Notizblock Anwendung Implementierung und ich fand es ganz einfach, die Noten so wählen:

select * from notes order by position 

Und wenn eine Notiz an einer bestimmten Position eingesetzt wird, habe ich zuerst ein ...

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

... jede Note verschieben Platz für die neue Note an Position insert_position zu machen.

Aber ich sah, dass WebSQL tatsächlich veraltet ist.

Welche Möglichkeiten gibt es, um eine solche Funktion in IndexedDB zu erreichen? Ich verstehe nicht vollständig, wie eine geordnete Liste in einer Umgebung wie IndexedDB erstellt wird, da eine schnelle Abfrage wie oben nicht anwendbar ist.

Als eine Randnotiz weiß ich, dass es möglich ist, ein Array in IndexedDB zu speichern, aber dann hätte ich nur einen Datensatz, den ich jedes Mal verwende. Ich bin eher auf der Suche nach einer Möglichkeit, eine geordnete Liste aller Datensätze (jeder Datensatz, der eine Notiz darstellt) zu haben, und in der Lage zu sein, die Reihenfolge zu aktualisieren (wie die obige Verschiebung).

Könnte jemand den IndexedDB-Weg einer geordneten Liste beleuchten?

Antwort

2

Wie bei vielen Dingen gibt es ein paar Möglichkeiten, diese Nuss zu knacken.

Wenn Sie eine App erstellen, die Notizen basierend auf der Erstellungszeit sortiert, wäre dies so einfach wie die Verwendung eines automatischen Inkrementierungsschlüssels (dieses Flag wird unter objectStore erstellt). Hinweis 1 würde die id (aka primaryKey) von 1, die zweite 2 usw. haben. Dies würde den Standardwert keyPath verwenden, sodass Sie einen Cursor öffnen können, ohne einen Index erstellen zu müssen.

Um Notizen nach etwas zu ordnen, das sich ändern könnte, z. B. rechtzeitig geändert, erstellen Sie einen Index für dieses Feld und stellen Sie sicher, dass es bei adding oder putting Objekten angegeben wird. Sie würden einen Cursor mit einer unteren Grenze von beispielsweise 0 (lexikographisch geordnete Schlüssel bedeutet, dass dies vor allen Zeichenfolgen steht) öffnen und die obere Grenze offen lassen. Sie würden dann den Cursor über jede Zeile nacheinander abfeuern onsuccess Handler, bis Sie Ihren Cursor erschöpfen und es gibt Null in event. target.result zurück.

Es hört sich so an, als ob Sie ein Feld wie "Position" suchen und darauf bestellen möchten. Das ist mit einem normalen Index und Cursor wie oben beschrieben möglich. Eine Anmerkung des Rates wäre, position Feld eine Fließkommazahl anstelle einer Ganzzahl zu machen, da mit dem ehemaligen Sie den Auftrag aktualisieren können, ohne andere Zeilen zu ändern (position n = ((position 1 + position 2)/2)).

+0

Vielen Dank für Ihre Hilfe. Die Gleitkomma Idee ist neu für mich und scheint sehr interessant zu sein, danke! – pimvdb