2012-01-06 32 views

回答

0

因爲我無法找到任何東西,所以這是我所已到位現在,它對我的​​目的非常有用。這是一種黑客,我對它不滿意,但是,嘿,現在,這是可以做到的。

我只是存儲一行,因爲我需要在該數據庫中。在閱讀後,我得到所有行並執行我需要的操作,這只是一行。當我插入一個新行時,我只是清除整個數據庫,這又是一行,並在其中插入一個新行。

@spiderdevil,我剛剛看到了你的答案,我不確定我是否能夠嘗試中止交易,但如果它確實適用於其他人,請在評論中分享。

0

排序的黑客,但我相信,如果你不在結果對象上調用continue()它只會處理第一個項目。

下面是使用遊標查詢並僅處理一個結果的快速示例。

var db = _IndexedDatabase; 
var trans = db.transaction(["Sites"], IDBTransaction.READ_ONLY); 
var store = trans.objectStore("Sites"); 
var request = store.openCursor(); 
request.onsuccess = function (e) 
{ 
    var result = e.target.result; 
    if(!!result == false) { return; } 
    // Use result.value some how 

    // Comment out this line to process the first item only 
    //result.continue(); 
}; 
+0

我的確做到了這一點,而且目前工作正常,但是當您嘗試關閉Chrome附加組件(我需要在附加組件中使用此附加組件)時,整個Chrome瀏覽器都會崩潰。 – strider 2012-01-31 17:35:44

+0

Chrome有一些使用IndexedDB會導致整個瀏覽器崩潰的問題。我曾向Chrome團隊[提交缺陷](http://code.google.com/p/chromium/issues/detail?id=108871),我相信它現在已經修復(至少在dev版本中) 。在開發版或金絲雀版Chrome或Firefox中再次嘗試您的代碼,因爲它似乎始終有效。 – Shawn 2012-02-02 04:37:43

1

您可以使用Transaction.abort()

例如,如果使用@肖恩的例子

var db = _IndexedDatabase; 
var trans = db.transaction(["Sites"], IDBTransaction.READ_ONLY); 
trans.onabort = function(event) { 
     console.log(event); 
}; 
var store = trans.objectStore("Sites"); 
var request = store.openCursor(); 
request.onsuccess = function (ev) 
{ 
    var cursor = request.result || ev.target.result; 
    if(!!cursor == false) 
      return; 

    console.log(cursor.value); 
    try{ 
     transaction.abort(); 
    }catch(e){ 
     console.log(e); 
    } 
}; 
6

使用遊標而不是調用.continue()根本不是破解。這是預期的方式。關於遊標的要點正是它們讓你只能獲取你需要的信息。

所以不需要調用transaction.abort()

0

只需使用該指數的Get方法。這將返回給定鍵的第一條記錄,只有缺點是你無法排序。