1

我一直在玩 indexed_db,到目前为止它看起来相当令人印象深刻。

但是,我在选择单个记录时遇到了问题,我可以让它工作的唯一方法是选择整个“表”并处理它,直到遇到我需要的键。(objectStore.openCursor())。我认为 index.getKey() 可以以某种方式使用,但我不知道如何使其工作。我尝试的另一件事是 index.openCursor()。

有人可以发布一个如何做到这一点的工作示例吗?(按键选择单个“记录”)。

4

1 回答 1

0

尝试这样的事情:

import 'dart:html';
import 'dart:indexed_db';


void main() {

  List data = [
               {"name":"Chris", "lang":"Dart"},
               {"name":"Tom", "lang": "Java"}
               ];

  OpenDBRequest request = window.indexedDB.open("MyDatabase", 1);

  // create the structure
  request.onUpgradeNeeded.first.then((d) {
    var db = request.result;
    var objectStore = db.createObjectStore("people", { "keyPath":"name" });

    // create an index
    objectStore.createIndex("name", "name", { "unique": false });

    // insert some data
    data.forEach((record) => objectStore.add(record));
  });  

  // query for item with the name="Chris"
  request.onSuccess.first.then((v) {
    var db = request.result;

    var objectStore = db.transaction("people","readwrite").objectStore("people");

    // query for the object where name = "Chris"
    var requestedObject = objectStore.getObject("Chris");

    requestedObject.onSuccess.first.then((val) {
      // we've retrieved the value, print out fields
      print(requestedObject.result["name"]); // Chris
      print(requestedObject.result["lang"]); // "Dart"
    });

  });


}

References: I used this github code from todo MVC example, and these MDN docs to understand IndexedDB (and Dart SDK + Editor 17463)

于 2013-01-31T22:04:27.060 回答