在IndexedDB中使用有序列表

时间:2012-04-08 11:15:27

标签: javascript database-design web-sql sortedlist 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方式有所了解吗?

1 个答案:

答案 0 :(得分:2)

与许多事情一样,有几种方法可以解决这个问题。

如果您正在创建一个根据创建时间订购备注的应用程序,那么就像使用自动递增键一样简单(此标志在objectStore创建时指定)。请注意,其中id(又名primaryKey)为1,第二个为2,依此类推。这将使用默认的keyPath,因此您可以打开游标而无需创建索引。

要按可能更改的内容(例如按时修改)订购备注,您需要在该字段上创建索引,并确保在addingputting个对象时指定它。您可以打开一个下限为0的游标(按字典顺序排列的键意味着它出现在所有字符串之前)并保持上限打开。然后,您将逐行触发每一行,触发onsuccess处理程序,直到您耗尽光标并在event. target.result中返回null。

听起来你可能正在寻找一个像“位置”这样的领域和秩序。如上所述,这对于常规索引和游标是完全可行的。建议的一个注意事项是使position字段成为浮点数而不是整数,因为前者可以更新顺序而无需更改任何其他行(position n = ( ( position 1 + position 2 ) / 2 ))。