Indexeddb添加新值,而不是更新现有值
Indexeddb adds a new value instead of updating an existing value
当尝试使用put
方法更新indexeddb中的记录时,似乎创建了一个新值而不是更改。根据MDN这是更新记录的方法,但我没有得到预期的结果。什么好主意吗?下面是我的代码示例。
/*
@keys initalisation
*/
extension.onupgradeneeded = function (event) {
database = event.target.result;
if (!database.objectStoreNames.contains('profile')) {
var _profile = database.createObjectStore('profile', { autoIncrement: true });
_profile.createIndex('default', 'default', { unique: true });
_profile.createIndex('username', 'username', { unique: true });
_profile.transaction.oncomplete = function (_oncompleteEvent) {
app.database.store(database, 'profile', {
default: true,
username: 'my name',
image: 'images/svg/menu.svg'
});
};
}
var app = {
database: {
update: function (_database, _datakeys, _key, _value, _function) {
/*
@pass database object, array / string, string, object, callback
*/
var _updateRequest = _database.transaction(_datakeys, "readwrite").objectStore(_key).put(_value);
_updateRequest.onerror = function (event) {
try {
_function.error(event);
} catch(err) {
console.log('An error was encountered', event.target.error.name);
}
};
_updateRequest.onsuccess = function (event) {
try {
_function.success(event);
} catch (error) {
_function(event);
}
};
}
}
};
/*
@how I call the function
*/
app.database.update(database, 'profile', 'profile', {default: false, username: 'hello world', image: 'http://imagepath.com' }, {
error: function () {
alert('failed');
},
success: function (returnedData) {
console.log(returnedData);
}
);
您使用的是内线键还是外线键?
- 如果是内联的,你需要在使用
store.put
之前在对象中设置id
(无论你叫它什么)属性。 - 如果脱行,则需要将
id
属性值作为第二个参数传递给store.put
。
编辑:如果您不知道键是行内的还是行外的,请查看以下内容:
每个对象存储库必须有一个在其数据库中唯一的名称。对象存储可以有一个密钥生成器和一个密钥路径。如果对象存储有键路径,则使用内联键;否则,将使用行外键。
如果您正在使用内联,并且您正在设置属性,并且它仍然执行插入而不是更新,请在调用store.put
之前尝试console.log('The object passed to put is %o', objToPut);
,并验证id
属性(或您命名的存储主键)是否已定义并且具有预期的值(其id)。
如果您没有为存储使用键,那么所有的put都将是insert,因为indexedDB无法知道要更新哪个对象。如果你想这样做,也许你可以在你想改变的对象上使用openCursor,然后使用游标。更新以替换该对象
相关文章:
- 添加文字和评论功能更新Div
- 通过jQuery添加ng样式属性,angular不更新
- 更新数据,而不是用javascript和jquery将其添加到我的表中
- JSON:loop Invoice Items:如果InvoiceNo未退出则添加,如果退出则更新值,示例包括在内
- 如何使用jQuery来添加分段的表单字段,并在添加不同值时进行更新
- 如何在猫鼬中更新文档后添加一些操作
- 如何在jQuery中的单个保存按钮上更新数据和添加数据
- 通过Couchdb中的更新处理程序添加id和author字段
- 如何在使用setInterval()更新的值中添加逗号
- 如何更新浏览器'使用Ajax将html添加到页面后的缓存
- 向HTML页面添加按钮,更新表格信息
- 如何正确添加到使用requestAnimationFrame不断更新的变量中
- sails.js更新或添加新行
- 如果源 json 已更新(添加或删除项目),则动态更新 D3 旭日
- 在 ajax 调用后更新/添加值到多个 select2 字段
- 如何在JavaScript中更新/添加数组的元素
- 更新/添加数据到谷歌电子表格数据库
- 在json对象中搜索元素以更新/添加该对象中的一些数据
- 基于另一个字符串更新/添加字符串值
- 仅在第二次单击时更新添加的javascript元素