javascript-Indexeddb添加新值而不是更新现有值
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了javascript-Indexeddb添加新值而不是更新现有值,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2337字,纯文字阅读大概需要4分钟。
内容图文
![javascript-Indexeddb添加新值而不是更新现有值](/upload/InfoBanner/zyjiaocheng/679/5791a711d535485c96d42512ac151b5f.jpg)
当尝试使用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.
编辑:如果您不知道键是行内还是行外,请查看following:
Every object store must have a name that is unique within its database. The object store can optionally have a key generator and a key path. If the object store has a key path, it is using in-line keys; otherwise, it is using out-of-line keys.
如果您正在内联使用并且正在设置属性,并且该属性仍在执行插入操作而不是更新操作,请尝试console.log(‘传递给put的对象为%o’,objToPut);在调用store.put之前,并验证是否定义了id属性(或任何您命名为商店的主键的属性)并具有期望值(其id).
如果您不使用存储键,则所有put都将是插入键,因为indexedDB无法知道要更新哪个对象.如果仍然要执行此操作,也许可以对要更改的对象使用openCursor,然后使用cursor.update替换该对象,从而摆脱困境.
内容总结
以上是互联网集市为您收集整理的javascript-Indexeddb添加新值而不是更新现有值全部内容,希望文章能够帮你解决javascript-Indexeddb添加新值而不是更新现有值所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。