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,请保留升级功能。