11

createIndexObjectStoreが次のように作成された直後にObjectStoreインデックスを定義するために使用するJavaScriptの例を複数見てきました。

var objectStore = ixDb.createObjectStore(osName, { keyPath: pkName, autoIncrement: autoIncrement });

objectStore.createIndex("name", "name", { unique: false }); 

createIndex誰かが電話せずに既存のテーブルでどのように使用するかを教えてもらえますcreateObjectStoreか?createObjectStoreここでの本当の問題は、 ?を使用せずにobjectStoreへの参照を取得する方法だと思います。

私は運が悪かった次のいくつかのバリエーションを試しました:

var objectStore = window.IDBTransaction.objectStore(ObjectStoreName);
var index = objectStore.createIndex(ixName, fieldName, { unique: unique, multiEntry: multiEntry });
4

2 に答える 2

4

の間onupgradeneededにそれを行います。これは、最初にオブジェクトストアを作成しているのと同じ場所である必要があります。そこでは、新しいインデックスの作成など、アップグレードに必要な適切なアクションを実行できます。これが例です。

于 2012-07-18T15:43:17.533 に答える
3

Chromeは現在、onupgradeneededイベントをサポートしていません。古いまたは新しいW3仕様を使用してObjectStoreへの参照を取得したい場合、これは、古いsetVersionコマンドを使用したonsuccessイベント、または新しいonupgradeneededイベントを介した1つの可能な回避策です。

var ixDb; 
var ixDbRequest; 
var ixDbVersionTansaction;

//Check to see if we have a browser that supports IndexedDB
if (window.indexedDB) {

ixDbRequest = window.indexedDB.open(dbName, dbVersion);

//For browsers like chrome that support the old set version method
ixDbRequest.onsuccess = function (e) {

    ixDb = ixDbRequest.result || e.result;

    if (typeof ixDb.setVersion === "function") {

        //Put your version checking logic here 

        if (oldVersion < newVersion) {
            var verRequest = ixDb.setVersion(newVersion);

            verRequest.onerror = function (e) {
                //handling error logic here
            }

            verRequest.onsuccess = function (e) {
                //Get a reference to the version transaction 
                //from the old setVersion method.
                ixDbVersionTansaction = verRequest.result;
                //Create database using function provided by the user. 
                UserFunction();
            }
        }
    }
}; 

ixDbRequest.onupgradeneeded = function (e) {
    //FF uses this event to fire the transaction for upgrades.  
    //All browsers will eventually use this method. Per - W3C Working Draft 24 May 2012
    ixDb = ixDbRequest.result || e.currentTarget.result;

    //Get a reference to the version transaction via the onupgradeneeded event (e)
    ixDbVersionTansaction = e.currentTarget.transaction;

    //Create database using function provided by the user. 
    UserFunction();
};

UserFunction(){
    //ObjectStore is accessed via ixDbVersionTansaction variable 
    // in either instance (transaction..objectStore("ObjectStoreName"))
    var ObjectStore = ixDbVersionTansaction.objectStore("ObjectStoreName");
    var index = ObjectStore.createIndex("ixName", "fieldName");
}
于 2012-07-18T20:53:20.537 に答える