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 中存储一个数组,但是我每次都会使用一条记录。我宁愿寻找一种方法来以某种方式拥有所有记录的有序列表(每个记录代表一个注释),并能够更新排序(如上面的移位查询)。

有人可以对有序列表的 IndexedDB 方式有所了解吗?

4

1 回答 1

2

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

如果您正在创建一个根据创建时间排序笔记的应用程序,它就像使用自动递增键一样简单(此标志在objectStore创建时指定)。请注意,一个将具有 1 的id(aka primaryKey),第二个是 2,依此类推。这将使用 default keyPath,因此您可以打开游标而无需创建索引。

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

听起来您可能正在寻找诸如“位置”和订单之类的字段。如上所述,使用常规索引和游标完全可以做到这一点。一个建议是让positionfield 成为浮点数而不是整数,因为前者可以更新顺序而无需更改任何其他行 ( position n = ( ( position 1 + position 2 ) / 2 ))。

于 2012-04-09T23:29:56.520 回答