感谢您提供错误信息。如果没有看到您的对象存储创建代码,我无法肯定地说,但我对这类问题非常熟悉。
这意味着您没有使用自动递增密钥,而是自己提供密钥。这是很正常的。在这种情况下,您使用以下IDBCursor.update()signature。
cursor.update(your_updated_entry_object);
IDB 知道要更新哪个条目,因为您的密钥在 your_updated_entry_object 上“内联”(这意味着 your_updated_entry_object 有一个属性是您的密钥)。
听起来您可能已经看到了IDBStore.put() 方法并且感到困惑。对于所谓的“内联密钥”(您拥有的)和“外联”密钥(如果您让 IDB 为您自动增加密钥,您会得到什么),这需要两个单独的签名。
使用内嵌密钥,它与IDBCursor.update() 的签名相同:
store.put(your_updated_entry_object);
但是,使用外键,它需要一个额外的 key 参数,告诉 IDB 更新哪个对象(因为您不在游标上,否则没有您的请求的上下文):
store.put(your-updated_entry_object, your_autoincremented_key);