indexed_db - 使用索引选择一条记录

时间:2013-01-31 17:49:33

标签: dart

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

我在选择单个记录时遇到问题,而我能让它工作的唯一方法是选择整个“表”并对其进行处理,直到遇到我需要的密钥。 (objectStore.openCursor())。我认为index.getKey()可以以某种方式使用,但我无法找到如何使这项工作。我尝试的另一件事是index.openCursor()。

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

1 个答案:

答案 0 :(得分: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"
    });

  });


}

<强>参考文献: 我使用了来自todo MVC示例的this github code,并使用这些MDN docs来理解IndexedDB(以及Dart SDK + Editor 17463)