将 IndexedDB 数据迁移到 JS 中的数组
migrate IndexedDB data to an array in JS
我是网络开发的新手,目前正在尝试使用 vue.js 和 dexie.js 开发一个“离线”应用程序。
Dexie.js 允许在现代浏览器上更轻松地访问索引数据库。
尽管如此,我认为我的问题更多是在基本 javascript 方面。
我得到了这个基本数据库(使用 Dexie“增强”):
var db = new Dexie("appDatabase");
db.version(1).stores({
tasks: '++id,name, agi, str, vit, int',
player: 'id, name, agi, str, vit, int',
});
(是的,只允许一名玩家)
..并将数据编辑和添加到 indexedDB 中工作得非常好......现在我正在尝试将数据从 IndexedDB 传输到数组以便在 Vue.js 中更容易视觉化
(我选择noneOf是因为我不介意玩家把名字留空)
transferDBtoArray() {
db.tasks.where('name').noneOf().toArray(function(result) {
for(var i= 0; i< result.length; i++) {
app.tasks[i].id = result[i].id;
app.tasks[i].name = result[i].name;
app.tasks[i].str = result[i].str;
app.tasks[i].int = result[i].int;
app.tasks[i].vit = result[i].vit;
app.tasks[i].agi = result[i].agi;
}
});
当这是我在 vue 应用程序中的数组结构时:
tasks : [
{id: 0, name:"", str: 0, agi: 0, int: 0, vit: 0}
],
遗憾的是,它无法按预期工作:
Unhandled rejection: TypeError: Cannot set property 'name' of undefined
我知道从数据库访问数据工作正常:
test() {
db.tasks.where('name').noneOf().toArray(function(result) {
for(var i= 0; i< result.length; i++) {
console.log( result[i].name);
console.log( result[i].agi);
console.log( result[i].str);
console.log( result[i].int);
console.log( result[i].vit);
}
});
},
js.js:136 hüpfen
js.js:137 10
js.js:138 2
js.js:139 5
js.js:140 10
js.js:136 instagrammen
js.js:137 10
js.js:138 10
js.js:139 10
js.js:140 10
js.js:136 lollen
js.js:137 1
js.js:138 1
js.js:139 1
js.js:140 1
js.js:136 rennen
js.js:137 5
js.js:138 3
js.js:139 2
js.js:140
我猜我的错误是在数组的结构中,但我不确定..
如有任何帮助,我们将不胜感激并致以诚挚的问候
理查德
您需要在循环中每次赋值的开始将app.tasks[i]
设置为一个空对象:
transferDBtoArray() {
db.tasks.where('name').noneOf().toArray(function(result) {
for(var i= 0; i< result.length; i++) {
app.tasks[i] = {};
app.tasks[i].id = result[i].id;
app.tasks[i].name = result[i].name;
app.tasks[i].str = result[i].str;
app.tasks[i].int = result[i].int;
app.tasks[i].vit = result[i].vit;
app.tasks[i].agi = result[i].agi;
}
});
或者更好:
transferDBtoArray() {
db.tasks.where('name').noneOf().toArray(results => results.map(result => ({
id: result.id,
name: result.name,
str: result.str,
int: result.int,
vit: result.vit,
agi: result.agi,
})));
我是网络开发的新手,目前正在尝试使用 vue.js 和 dexie.js 开发一个“离线”应用程序。 Dexie.js 允许在现代浏览器上更轻松地访问索引数据库。
尽管如此,我认为我的问题更多是在基本 javascript 方面。
我得到了这个基本数据库(使用 Dexie“增强”):
var db = new Dexie("appDatabase");
db.version(1).stores({
tasks: '++id,name, agi, str, vit, int',
player: 'id, name, agi, str, vit, int',
});
(是的,只允许一名玩家)
..并将数据编辑和添加到 indexedDB 中工作得非常好......现在我正在尝试将数据从 IndexedDB 传输到数组以便在 Vue.js 中更容易视觉化 (我选择noneOf是因为我不介意玩家把名字留空)
transferDBtoArray() {
db.tasks.where('name').noneOf().toArray(function(result) {
for(var i= 0; i< result.length; i++) {
app.tasks[i].id = result[i].id;
app.tasks[i].name = result[i].name;
app.tasks[i].str = result[i].str;
app.tasks[i].int = result[i].int;
app.tasks[i].vit = result[i].vit;
app.tasks[i].agi = result[i].agi;
}
});
当这是我在 vue 应用程序中的数组结构时:
tasks : [
{id: 0, name:"", str: 0, agi: 0, int: 0, vit: 0}
],
遗憾的是,它无法按预期工作:
Unhandled rejection: TypeError: Cannot set property 'name' of undefined
我知道从数据库访问数据工作正常:
test() {
db.tasks.where('name').noneOf().toArray(function(result) {
for(var i= 0; i< result.length; i++) {
console.log( result[i].name);
console.log( result[i].agi);
console.log( result[i].str);
console.log( result[i].int);
console.log( result[i].vit);
}
});
},
js.js:136 hüpfen
js.js:137 10
js.js:138 2
js.js:139 5
js.js:140 10
js.js:136 instagrammen
js.js:137 10
js.js:138 10
js.js:139 10
js.js:140 10
js.js:136 lollen
js.js:137 1
js.js:138 1
js.js:139 1
js.js:140 1
js.js:136 rennen
js.js:137 5
js.js:138 3
js.js:139 2
js.js:140
我猜我的错误是在数组的结构中,但我不确定..
如有任何帮助,我们将不胜感激并致以诚挚的问候
理查德
您需要在循环中每次赋值的开始将app.tasks[i]
设置为一个空对象:
transferDBtoArray() {
db.tasks.where('name').noneOf().toArray(function(result) {
for(var i= 0; i< result.length; i++) {
app.tasks[i] = {};
app.tasks[i].id = result[i].id;
app.tasks[i].name = result[i].name;
app.tasks[i].str = result[i].str;
app.tasks[i].int = result[i].int;
app.tasks[i].vit = result[i].vit;
app.tasks[i].agi = result[i].agi;
}
});
或者更好:
transferDBtoArray() {
db.tasks.where('name').noneOf().toArray(results => results.map(result => ({
id: result.id,
name: result.name,
str: result.str,
int: result.int,
vit: result.vit,
agi: result.agi,
})));