2014-04-11 41 views
1

我一直试图从使用Dart的IndexedDb包的IndexedDb实例中获取单个条目。但我打电话给getObject()其中说明文件返回Future *(我不知道的未来)我没有任何Maps或其他物体可以使用。在Dart中使用IndexedDb ObjectStore

Futurestore.getObject(id).then()方法中返回什么?如果它不返回任何内容,我如何获取存储在数据库中的信息?

//within a TurnObjectStore class 
Future<Turn> getTurn(int id){ 
    Transaction t = _db.transaction(_TABLE_NAME, 'readonly'); 
    ObjectStore store = t.objectStore(_TABLE_NAME); 
    return store.getObject(id).then((Map turn){ 
     print('getTurn'); 
     print(turn); 
     return turn; 
    }); 
} 

类似的问题在这里回答indexed_db getObject() - how to return result,但我发现在我的IDE的警告,当我尝试这种方式,如果去年以来该规范已经改变了我不知道。

回答

1
正常工作

我使用飞镖1.2和的getObject(ID)。

我相信返回未来类型取决于什么存储到您的数据库... 如果你没有数据保存为对象的地图,它会返回一个地图

店&恢复你的对象作为地图,你可以看看the official dart example for indexedDB

// Serialize this to an object (a Map) to insert into the database. 
Map toRaw() { 
    return { 
    'milestoneName': milestoneName, 
    'happensOn': happensOn.toString(), 
    }; 
} 

//Create a Milestone based on the Map returned by the IndexedDB 
Milestone.fromRaw(key, Map value): 
    dbKey = key, 
    milestoneName = value['milestoneName'], 
    happensOn = DateTime.parse(value['happensOn']) { 
    tick(); 
    } 

您可以通过Chrome的开发者工具直接看到所存储的对象,对于存储地图它应该是这样的:

enter image description here

所以我可以取回对象with getObject:

var tr = mydb.transaction(myDB.CLIENT_STORE, 'readonly'); 
var st = tr.objectStore(myDB.CLIENT_STORE); 
st.getObject(2).then((r){ 
    Client client = new Client.fromRaw(2,r); 
    [...] 
} 
相关问题