Dexie 的 Version.upgrade() 使用打字稿
Dexie's Version.upgrade() using typescript
我有一个使用 Dexie 的打字稿应用程序。我想创建一个新版本,我还想使用 Version.upgrade().
填充 table
我扩展示例 https://github.com/dfahlander/Dexie.js/tree/master/samples/typescript 如下:
export interface ICity {
id?: number;
name: string;
}
export class AppDatabase extends Dexie {
contacts: Dexie.Table<Contact, number>;
emails: Dexie.Table<IEmailAddress, number>;
phones: Dexie.Table<IPhoneNumber, number>;
cities: Dexie.Table<ICity, number>;
constructor() {
super("ContactsDatabase");
var db = this;
//
// Define tables and indexes
//
db.version(1).stores({
contacts: '++id, firstName, lastName',
emails: '++id, contactId, type, email',
phones: '++id, contactId, type, phone',
});
db.version(2).stores({
cities: '++id, name'
}).upgrade((tx: Dexie.Transaction) => {
tx.table("cities").bulkAdd([
{ name: "London" },
{ name: "Berlin" },
{ name: "Paris" }
]);
});
// Let's physically map Contact class to contacts table.
// This will make it possible to call loadEmailsAndPhones()
// directly on retrieved database objects.
db.contacts.mapToClass(Contact);
}
}
但它没有按预期工作。
有人提示吗?
升级功能仅运行适用于安装了版本 1 的客户端。干净的浏览器会直接进入版本2,没有升级功能。
解决方案:添加一个初始化城市的填充函数 table。
db.on('populate', () => db.cities.bulkAdd([
{ name: "London" },
{ name: "Berlin" },
{ name: "Paris" }
]));
如果您的用户可能仍在使用版本 1,请保留升级功能。
我有一个使用 Dexie 的打字稿应用程序。我想创建一个新版本,我还想使用 Version.upgrade().
填充 table我扩展示例 https://github.com/dfahlander/Dexie.js/tree/master/samples/typescript 如下:
export interface ICity {
id?: number;
name: string;
}
export class AppDatabase extends Dexie {
contacts: Dexie.Table<Contact, number>;
emails: Dexie.Table<IEmailAddress, number>;
phones: Dexie.Table<IPhoneNumber, number>;
cities: Dexie.Table<ICity, number>;
constructor() {
super("ContactsDatabase");
var db = this;
//
// Define tables and indexes
//
db.version(1).stores({
contacts: '++id, firstName, lastName',
emails: '++id, contactId, type, email',
phones: '++id, contactId, type, phone',
});
db.version(2).stores({
cities: '++id, name'
}).upgrade((tx: Dexie.Transaction) => {
tx.table("cities").bulkAdd([
{ name: "London" },
{ name: "Berlin" },
{ name: "Paris" }
]);
});
// Let's physically map Contact class to contacts table.
// This will make it possible to call loadEmailsAndPhones()
// directly on retrieved database objects.
db.contacts.mapToClass(Contact);
}
}
但它没有按预期工作。
有人提示吗?
升级功能仅运行适用于安装了版本 1 的客户端。干净的浏览器会直接进入版本2,没有升级功能。
解决方案:添加一个初始化城市的填充函数 table。
db.on('populate', () => db.cities.bulkAdd([
{ name: "London" },
{ name: "Berlin" },
{ name: "Paris" }
]));
如果您的用户可能仍在使用版本 1,请保留升级功能。