如何解决如何只修改 dexie 商店中的一个属性而不删除其余属性?
我在下面的打印屏幕中显示了 dexie 商店:
我的目标是在不丢失其余数据的情况下更新商店中的 dexie 字段行。
例如:当我编辑并保存第二行中的字段“com_name”(键={2})时,我只想更新“com_name”而不丢失其余的属性,请参见第一行和第三行.
我已经尝试过 collection.modify 和 table.update,但在使用以下代码时都删除了其余的属性:
dexieDB.table('company').where('dexieKey').equals('{1}')
//USING table.update
//.update(dexieRecord.dexiekey,{
// company: {
// com_name: "TOP SERVE 2"
// }
//})
.modify(
{
company:
{
com_name: TOP SERVE 2
}
}
)
.then(function (updated) {
if (updated)
console.log("Success.");
else
console.log("nothing was updated.");
})
.catch(function (err) { console.log(err); });
知道我怎样才能做到这一点吗?
谢谢 亚历克斯
解决方法
您有权使用 Table.update 或 Collection.modify。他们不应该删除指定属性之外的其他属性。你能粘贴一个 jsitor.com 或 jsfiddle 的 repro,有人可能会帮助你查明为什么代码没有按预期工作。
,既然您说的是我意识到公司和联系人存储是动态创建的,并且editedRecords 存储具有明确声明的索引,因此在更新公司或联系人存储时,因为 dexie 没有看到索引会被覆盖。我还没有测试过,但我怀疑这是行为。
请参阅下面的打印屏幕:
基本上我有来自 db 的 json 原始数据,在浏览器中我创建了商店并基于它存储数据,请参阅下面的代码:
function createDexieTables(jsonData) { //jsonData - array,is the json from db
const stores = {};
const editedRecordsTable = 'editedRecords';
jsonData.forEach((jsonPackage) => {
for (table in jsonPackage) {
if (_.find(dexieDB.tables,{ 'name': table }) == undefined) {
stores[table] = 'dexieKey';
}
}
});
stores[editedRecordsTable] = 'dexieKey,table';
addDataToDexie(stores,jsonData);
}
function addDataToDexie(stores,jsonData) {
dbv1 = dexieDB.version(1);
if (jsonData.length > 0) {
dbv1.stores(stores);
jsonData.forEach((jsonPackage) => {
for (table in jsonPackage) {
jsonPackage[table].forEach((tableRow) => {
dexieDB.table(table).add(tableRow)
.then(function () {
console.log(tableRow,' added to dexie db.');
})
.catch(function () {
console.log(tableRow,' already exists.');
});
});
}
});
}
}
这是json,我将其转换为对象并保存到值列中的dexie 和键si“dexieKey”:
[
{
"company": [
{
"dexieKey": "{1}","company": {
"com_pk": 1,"com_name": "CloudFire","com_city": "Round Rock","serverLastEdit": [
{
"com_pk": "2021-06-02T11:30:24.774Z"
},{
"com_name": "2021-06-02T11:30:24.774Z"
},{
"com_city": "2021-06-02T11:30:24.774Z"
}
],"userLastEdit": []
}
}
]
}
]
知道为什么动态生成索引时没有填充索引吗?
,鉴于 JSON 数据,我明白出了什么问题。
而不是将以下内容传递给 update():
{
company:
{
com_name: "TOP SERVE 2"
}
}
你可能想通过这个:
{
"company.com_name": "TOP SERVE 2"
}
另一个提示是在 rw 事务中进行添加,或者如果您可以使用 bulkAdd() 来优化性能,效果会更好。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。