0
var db = new Dexie(app.settings.unpublishedBooksDb);
db.version(1).stores({
    friends: "++id,name,shoeSize"
});
db.open();
db.close();

上記のコードを使用して事前に作成された indexedDB データベースがあり、アプリケーションの別のビューで、テーブルに行を追加する必要があります。

var db = new Dexie('myDb');
db.open().then(function() {
    console.log ('opened'); //this works
    db.friends.add({name:"Fredrik"}); //this doesnt do anything and adding a catch doesn't throw an error either
}).finally(function () {
    db.close();
});

使ってみ.transactionましたが同じです。Chrome のコンソールを使用しようとすると、次のエラーが表示されます:未定義のプロパティの追加を読み取ることができません

4

1 に答える 1

0

2 番目の db インスタンスには、含まれるテーブルに関する情報が含まれていません。したがって、暗黙的なテーブル プロパティ (db.friends) は存在しません。実際に起こることは、TypeError: cannot read property 'add' of undefined をスローすることです。呼び出しをキャッチすると (finally を実行するだけでなく)、その TypeError がキャッチされます。

できることは、db.friends.add({name: 'Fredrik'}) の代わりに db.table('friends').add ({name: 'Fredrik'}) で friends テーブルを参照することです。

ただし、テーブル スキーマを指定せずにデータベースを定義することは、十分にテストおよび使用されていないことに注意してください。そのため、他の落とし穴を回避するために、スキーマを定義して使用することをお勧めします。アーキテクチャ上の理由でまだ独自の方法で行う必要がある場合は、トランザクション スコープでも動的な暗黙の tale プロパティを使用できず、db.table() は現在トランザクション バインドを返さないため、トランザクション スコープの動作が少し異なることに注意してください。トランザクション スコープにいる場合はテーブル インスタンス。古いトランザクション API を使用する必要があります。

db.transaction('rw', 'friends', function (friends, trans) {
    friends.put({name: 'Fredrik'});
});

...それ以外の:

db.transaction('rw', 'friends', function () {
    db.friends.put({name: 'Fredrik'});
});

よろしくお願いします、デビッド

于 2015-05-13T10:12:15.347 に答える