我一直在玩 indexed_db,到目前为止它看起来相当令人印象深刻。
但是,我在选择单个记录时遇到了问题,我可以让它工作的唯一方法是选择整个“表”并处理它,直到遇到我需要的键。(objectStore.openCursor())。我认为 index.getKey() 可以以某种方式使用,但我不知道如何使其工作。我尝试的另一件事是 index.openCursor()。
有人可以发布一个如何做到这一点的工作示例吗?(按键选择单个“记录”)。
我一直在玩 indexed_db,到目前为止它看起来相当令人印象深刻。
但是,我在选择单个记录时遇到了问题,我可以让它工作的唯一方法是选择整个“表”并处理它,直到遇到我需要的键。(objectStore.openCursor())。我认为 index.getKey() 可以以某种方式使用,但我不知道如何使其工作。我尝试的另一件事是 index.openCursor()。
有人可以发布一个如何做到这一点的工作示例吗?(按键选择单个“记录”)。
尝试这样的事情:
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)