2012-01-06 18 views

答えて

0

@使用するので、これは私が場所に入れていたたものである場合には、例えば)(

をTransaction.abortを使用することができます今、それは私の目的のために素晴らしい作品です。それはハックだと私はそれに満足していないが、ねえ、今のところ、これは行います。

私はそのデータベースに必要なものを1行だけ保存しています。読んで、私はすべての行を取得し、必要なアクションを実行します。これは1行だけです。私は新しい行を挿入するときに、データベース全体をクリアしています。もう1つの行だけが新しい行を挿入します。

@spiderdevil、私はちょうどあなたの答えを見て、私はトランザクションを中止しようとすることができるかどうかは分かりませんが、他の誰かのために働く場合は、コメントで共有してください。

0

ソートを並べ替えますが、結果オブジェクトでcontinue()を呼び出さないと、最初の項目だけが処理されると思います。

以下は、カーソルを使用してクエリを実行し、1つの結果のみを処理する簡単な例です。

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

+0

Chromeには、IndexedDBを使用するとブラウザ全体がクラッシュするといういくつかの問題がありました。私はChromeチームに[不具合を提出しました](http://code.google.com/p/chromium/issues/detail?id=108871)、これは修正されていると思います(少なくとも開発版では) 。デベロッパー版やカナリアー版のChromeやFirefoxでコードを再試行してみてください。 – Shawn

1

私は何かを見つけることができませんでしたので、ショーンの例

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メソッドを使用します。これは指定されたキーの最初のレコードを返しますが、ソートすることはできません。

関連する問題