Dart indexed_db put()错误

时间:2013-11-02 11:08:06

标签: dart indexeddb dartium

以下代码会抛出Internal Dartium Exception。

<!DOCTYPE html>

<html>
<head>
  <script type="application/dart">

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

    Random random = new Random();

    void main() {
      window.indexedDB.open('myDB', version: 1, onUpgradeNeeded: _initDB).then((Database db) {
        Transaction transaction = db.transaction('myStore', 'readwrite');
        ObjectStore objectStore = transaction.objectStore('myStore');
        Map data = {
          'id': 'id' + random.nextInt(1000).toString(),
          'name': 'name' + random.nextInt(1000).toString()
        };
        objectStore.put(data);
      });
    }

    void _initDB(VersionChangeEvent e) {
      (e.target as Request).result.createObjectStore('myStore');
    }

  </script>
  <script src="packages/browser/dart.js"></script>
</head>
</html>

我向http://www.dartbug.com/14256提交了一个问题,但我的代码可能有问题吗?

2 个答案:

答案 0 :(得分:1)

引用的错误表明这是一个错误,但错误消息现在很有用。它不应该报告更有用的消息:

  

未捕获错误:DataError:对象存储使用外线键并且没有密钥生成器,并且未提供密钥参数。

答案 1 :(得分:0)

尝试以下方法:

void _initDB(VersionChangeEvent e) {
    (e.target as Request).result.createObjectStore('myStore', autoIncrement: true);
}

但是您需要在设置中清除浏览器中的数据,以使新结构正常工作(或者可能增加db版本号)。