我正在尝试通过创建一个简单的记事本应用程序来学习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方式有所了解吗?
答案 0 :(得分:2)
与许多事情一样,有几种方法可以解决这个问题。
如果您正在创建一个根据创建时间订购备注的应用程序,那么就像使用自动递增键一样简单(此标志在objectStore
创建时指定)。请注意,其中id
(又名primaryKey
)为1,第二个为2,依此类推。这将使用默认的keyPath
,因此您可以打开游标而无需创建索引。
要按可能更改的内容(例如按时修改)订购备注,您需要在该字段上创建索引,并确保在adding
或putting
个对象时指定它。您可以打开一个下限为0
的游标(按字典顺序排列的键意味着它出现在所有字符串之前)并保持上限打开。然后,您将逐行触发每一行,触发onsuccess
处理程序,直到您耗尽光标并在event. target.result
中返回null。
听起来你可能正在寻找一个像“位置”这样的领域和秩序。如上所述,这对于常规索引和游标是完全可行的。建议的一个注意事项是使position
字段成为浮点数而不是整数,因为前者可以更新顺序而无需更改任何其他行(position n = ( ( position 1 + position 2 ) / 2 )
)。