7

objectStore からの値を自動的に入力したい選択ボックスがあります。そのためには、次のように繰り返す必要があります。

var db;
var req = indexedDB.open("DB");
req.onsuccess = function (e) {
    db = req.result;
    var tran = db.transaction("store");         
    var singleKeyRange = IDBKeyRange.only("myvalue"); //the value I want to reach from COL2         
    tran.objectStore("store").openCursor(singleKeyRange).onsuccess = function(e) { 
        var cursor = e.target.result;
        if (cursor) { 
            var opt = document.getElementById("selectbox");
            var option = document.createElement("option");
            var optionText=document.createTextNode(cursor.value.COL1); //the matching values in COL1
            option.appendChild(optionText);
            opt.appendChild(option);
            cursor.continue();
        }
    }
};

objectStore ですべての値が正しくインデックス化されていますが、他の値を介して値に到達する方法がわかりません。

4

2 に答える 2

6

これは、インデックスのない列でアイテムが検索される例です。すべてのアイテムを調べて値を比較し、それらをリストに追加する必要があります。その後、結果セットを返すことができます。

function SearchItems( keyPath, value, requestNo, callback){
    var initOpenReq = indexedDB.open(baseName);
    initOpenReq.onsuccess = function() {
    var db = initOpenReq.result;
        var transaction = db.transaction(objectStoreName, 'readonly');
        var objectStore = transaction.objectStore(objectStoreName);
        var cursorRequest = objectStore.openCursor();
        var agregate = [];
        cursorRequest.onsuccess = function (event){
            if (event.target.result){
                if(event.target.result.value[keyPath] && event.target.result.value[keyPath] == value){ //compare values
                    agregate.push(event.target.result.value);
                }
                event.target.result['continue']();
            }
        };

        transaction.oncomplete = function (event) {
                callback(agregate); // return items
        };
    }
}
于 2012-10-02T13:36:34.723 に答える
4

これは、インデックスを使用した例です。

var db; 
var req = indexedDB.open("DB", 2);
// Creating the index
req.onupgradeneeded = function (e){
   var trans = e.target.transaction;
   var obj = trans.objectStore("store");
   obj.createIndex("indexname", "keypath") // keypath is the propertyname you want the index on. for Ex. {Name: "x", Age:5 }; If you want to filter on Name, keypath = Name
} 
req.onsuccess = function (e) {
    db = req.result;
   var tran = db.transaction("store");
   var singleKeyRange = IDBKeyRange.only("myvalue"); //the value I want to reach from COL2              
   var objectStore = tran.objectStore("store");
   var opt = document.getElementById("selectbox");

   objectStore.index("indexname").openCursor(singleKeyRange).onsuccess = 
   function(e){          
         var cursor = e.target.result;
         if (cursor) {
             var option = document.createElement("option");
             var optionText=document.createTextNode(cursor.value.COL1); //the matching values in COL1             
             option.appendChild(optionText);
             opt.appendChild(option);
             cursor.continue(); 
         }
     } 
}; 
于 2012-10-03T05:15:21.800 に答える