Dexie - zuki/Dexie.js GitHub Wiki

Dexie.js (オフィシャルホームページ: dexie.org) は、ブラウザで使用する標準的なクライアントサイドデータベースであるindexedDBの使用を超簡単にするライブラリである。Dexieの詳細については、READMEまたはホームページを読まれたい。

Dexie はメインクラスであり、ライブラリでデフォルトでexportされるものである。このクラスのインスタンスはindexedDBデータベースとのコネクションを表す。

文法

var db = new Dexie (databaseName, options?);

パラメタ

dbName : String データベース名
options: Object (optional) オプション

オプション

addons: Array<DexieAddon> このdbインスタンスで有効にするアドロンを明示的に定義する
autoOpen: boolean デフォルトはtrue。最初のクエリがあった際にデータベーすを自動的にオープンするか否か。
indexedDB: IDBFactory indexedDBの代替となる実装を指定する。これを指定する場合は、その実装で使用するIDBKeyRangeも指定する。
IDBKeyRange: IDBKeyRange 指定したindexedDB実装で使用するIDBKeyRangeインターフェースの実装

'addons' オプションが指定されない場合は、Dexie.addonsの値がデフォルトで使用される。

返り値

Dexie

// dbインスタンスを宣言する
var db = new Dexie("MyDatabase");

// データベーススキーマを定義する
db.version(1).stores({
    friends: "++id, name, age, isCloseFriend",
    notes: "++id, title, date, *items"
});

// データベーすを使用する
db.transaction('rw', db.friends, db.notes, function* () {

    // dbにデータを追加する:
    var friend1Id = yield db.friends.add({name: 'Camilla', age: 25, isCloseFriend: 1});
    var friend2Id = yield db.friends.add({name: 'Ban Ki-moon', age: 70, isCloseFriend: 0});

    var noteId = yield db.notes.add({
        title: 'Shop tomorrow',
        date: new Date(),
        items: ['milk', 'butter']
    });

    // dbを検索する
    var closeFriends = yield db.friends
        .where('isCloseFriend').equals(1)
        .toArray();

    console.log("Close friends:" + closeFriends.map(f => f.name));

    var toShop = yield db.notes
        .where('title').startsWithIgnoreCase ('shop')
        .toArray();

    console.log("Shopping list: " + toShop.map(note => note.items));

}).catch(function(err) {

    // エラーイベントまたは例外を補足し、ログ出力する:
    console.error(err.stack || err);

});

jsfiddleで例を開く

例: 既存のデータベーすを"そのまま"オープンする

new Dexie('MyDatabase').open().then(function (db) {
    console.log ("Found database: " + db.name);
    console.log ("Database version: " + db.verno);
    db.tables.forEach(function (table) {
        console.log ("Found table: " + table.name);
        console.log ("Table Schema: " +
            JSON.stringify(table.schema, null, 4));
    });
}).catch('NoSuchDatabaseError', function(e) {
    // 指定した名前のデータベースが存在しない
    console.error ("Database not found");
}).catch(function (e) {
    console.error ("Oh uh: " + e);
});

jsfiddleで例を開く

例: カスタムお度音を持つDexieをインスタンス化する

// アドオンを定義する
function myForEachAddon(db) {
    db.Collection.prototype.forEach = function (callback) {
        // forEach() メソッドを既存のeach()の単なるエイリアスとする
        return this.each(callback);
    });
}
// アドオンを登録する(オプション)
Dexie.addons.push(myForEachAddon);


// アドロンを使用する:
var db = new Dexie('dbname');
db.version(1).stores({friends: 'name'});
db.transaction('rw', db.friends, function () {
    db.friends.clear();
    db.friends.bulkAdd([{name: "Foo"},{name: "Bar"}]);
}).then(function() {
    db.friends
      .where('name')
      .anyOfIgnoreCase('foo','bar')
      .forEach(friend => {
          console.log(friend.name);
      });
}).catch(ex => {
    console.error(ex);
});

options でどのように適用するアドオンを知らせるか:

// 普通にオープンする。登録されたアドオンが自動的に呼び出される:
var db1 = new Dexie('dbname');

// 登録されたアドオンを無視するよう明示的にDexieに知らせる:
var db2 = new Dexie('dbname', {addons: []});

// 指定したアドオンのみを使用するよう明示的にDexieに知らせる:
var db3 = new Dexie('dbname', {addons: [myForEachAddon]});

メソッド

特定のバージョンのデータベーススキーマ(オブジェクトストアとインデックス0を指定する

イベントを購読する

データベースをオープンし、機能を開始させる

操作するオブジェクトストアを返す

データベーストランザクションを開始する

データベースをクローズする

データベースを削除する

データベースがオープンしている場合、trueを返す

データベースのオープンに失敗した場合、trueを返す

ネイティブのIDBDatabaseインスタンスを返す

on('ready')の購読者にopen()の完了前にdbを使えるようにする

プロパティ

データベース名

version().stores()で定義された各オブジェクトストアは、そのオブジェクトストアにより命名されたWriteableTableインスタンスになる

すべてのTableインスタンスを含む配列

カレントデータベースのバージョン

スタティックメソッド

トランスパイラーを必要としない今日のモダンブラウザ(2015)で非同期関数を宣言する

トランスパイラーを必要としない今日のモダンブラウザ(2015)で非同期関数をSpawnする

データベーすを削除する

カレントoriginの全データベース名をリストする

指定した名前のデータベースが存在するか否かを検知する

指定したキーパスでオブジェクトのプロパティを取り出す

指定したキーパスと値でオブジェクトのプロパティを変更する

指定したキーパスでオブジェクトのプロパティを削除する

オブジェクトのシャロークローンを作成する

オブジェクトのディープクローンを作成する

カレントトランザクションを無視した新しいスコープを作成する。

既存のメソッドをオーバーライドし、独自のメソッドを呼び出せるようにする

関数を作成して、指定した構造でそのprototypeを追加する

OOP継承のためprototypeチェーンを修正する

指定した追加プロパティを指定のオブジェクトにセットする

購読したり発火したりする、一連のイベントを作成する

スタティックプロパティ

拡張コンストラクタの配列

デバッグモードの読み取りとセット

package.jsonで指定されたセマンティックバージョン文字列を持つ

相当の10進数値によるDexieのバージョン番号を持つ

⚠️ **GitHub.com Fallback** ⚠️