2012-04-08 3 views
1

Я пытаюсь изучить основы IndexedDB, создав тривиальное приложение-блокнот. У меня возникают трудности с использованием упорядоченного списка в этой среде.Использование упорядоченного списка в IndexedDB

Функция, которую я не знаю, как реализовать, имеет упорядоченный список заметок.

я впервые попробовал реализацию приложения блокнота в WebSQL, и я нашел, что это довольно легко выбрать ноты, как это:

select * from notes order by position 

И при вставке примечания в указанной позиции, я первым сделал ...

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

... переложить каждую ноту, чтобы освободить место для новой ноты в позиции insert_position.

Но я видел, что WebSQL фактически не рекомендуется.

Каковы возможности достижения такой функции в IndexedDB? Я не совсем понимаю, как создать упорядоченный список в среде, такой как IndexedDB, поскольку быстрый запрос, подобный приведенному выше, неприменим.

Как примечание, я знаю, что можно хранить массив в IndexedDB, но тогда у меня будет только одна запись, которую я использую каждый раз. Я скорее ищу способ каким-то образом иметь упорядоченный список всех записей (каждая запись, представляющая заметку), и иметь возможность обновлять порядок (например, смещающий запрос выше).

Может ли кто-то пролить свет на метод IndexedDB упорядоченного списка?

ответ

2

Как и многие вещи, есть несколько способов взломать этот орех.

Если вы создавали приложение, которое заказывает заметки на основе времени создания, это было бы так же просто, как использование ключа с автоматическим приращением (этот флаг указан в objectStore творениях). Обратите внимание, что у id (aka primaryKey) 1, второго 2 и так далее. Это будет использовать значение по умолчанию keyPath, поэтому вы можете открыть курсор, не создавая индекс.

Чтобы заказать заметки, которые могут быть изменены, например, измененные по времени, вы должны создать индекс в этом поле и не забудьте указать его, когда adding или putting объектов. Вы откроете курсор с нижней границей, скажем 0 (лексикографически упорядоченные ключи означают, что это происходит перед всеми строками) и оставить верхнюю границу открытой. Затем вы наводите курсор на каждую строку один за другим, стреляя onsuccess обработчиками, пока не исчерпаете свой курсор, и он возвращает null в event. target.result.

Похоже, что вы можете искать такое поле, как «позиция» и порядок на этом. Это полностью выполнимо с обычным индексом и курсором, как указано выше. Одна из рекомендаций заключалась бы в том, чтобы сделать position полем с плавающей запятой, а не целым числом, так как с первым вы можете обновить заказ без необходимости изменять какие-либо другие строки (position n = ((position 1 + position 2)/2)).

+0

Спасибо за вашу помощь. Идея с плавающей точкой для меня нова и кажется очень интересной, спасибо! – pimvdb

Смежные вопросы