【发布时间】:2018-11-23 18:04:11
【问题描述】:
对于我的应用程序,我希望用户能够为表指定索引列。
我知道为了做到这一点,我需要关闭数据库,指定一个新版本,然后再次打开它。为了尽量减少这样做的影响,我将应用程序的这个自定义部分放在它自己的数据库中。
这是我如何做的一个例子。
import Dexie from 'dexie';
const db = new Dexie("CustomPeople");
db.version(1).stores({
people: '++id'
});
function testColumnAdd() {
modifyColumns(['firstName'])
.then(() => {
db.people.add({
firstName: 'John'
});
})
.then(() => {
return modifyColumns(['firstName', 'lastName']);
})
.then(() => {
db.people.add({
firstName: 'John',
lastName: 'Smith'
});
});
}
function modifyColumns(columns) {
return db.open()
.then(() => {
const originalVersion = db.verno;
console.log('original version: ' + originalVersion);
db.close();
return originalVersion;
})
.then((originalVersion) => {
const newVersion = originalVersion + 1;
console.log('adding columns ' + columns.join(','));
console.log('new version version ' + newVersion);
db.version(newVersion).stores({
leads: '++id,' + columns.join(',')
});
return db.open();
});
}
每次调用 testColumnAdd() 时,这似乎都能正常工作。
但是,在页面重新加载后,testColumnAdd() 的第一个触发器给出了以下异常。
Unhandled rejection: VersionError: The requested version (10) is less than the existing version (70).
这绝对是有道理的,因为 Dexie 最初可以看到的都是版本 1。有没有办法让我可以阅读当前版本并使用它?
有没有更好的方法来处理用户定义的索引?
【问题讨论】: