2

我正在使用 linq2indexedDB 包装器来处理 IndexedDB。我正在使用 TypeScript,但我认为这与问题无关——它应该只是解释稍微奇怪的语法。我创建了我的数据库并添加了一些对象存储和索引(代码缩短以保持重点):

var databaseDefinition = [{
        version: config.version,
        objectStores: [
            { name: "Regions", objectStoreOptions: { autoIncrement: false, keyPath: "ID" } },
            { name: "Countrys", objectStoreOptions: { autoIncrement: false, keyPath: "ID" } }
            // etc.
        ],
        indexes: [
            { objectStoreName: "Countrys", propertyName: "RegionID", indexOptions: { unique: true, multirow: false } }
            // etc.
        ]
    }];

这可行,通过在 chrome F12 工具中检查我的数据库结构,我可以看到预期的 objectStores。然后我尝试一个简单的插入操作:

    var region = serverData.Regions[0];
    this.db.linq.from("Regions").insert(region, region.ID).then((args) => {
        tracer.Trace("Insert success: " + args);
    }, (args) => {
        tracer.Trace("Insert failure: " + args);
    });

这失败了,但args返回的对象是未定义的,所以我不知道为什么。谁能解释这个问题可能是什么以及我该如何追踪它?

编辑(删除了附加代码,因为它与问题并不严格相关。打开日志记录,如下面 Kristof 的回答中所述,有助于追踪问题,这在下面我自己的回答中得到了解决)。

4

2 回答 2

2

不是 100% 确定问题是什么,但是当定义了键路径并且对象中存在键路径的值时,无需提供键。

我看不到您的所有代码,但是您是否创建了 linq2indexeddb 对象的新实例?

如果你这样做了,你可以执行以下操作:

var db = window.linq2indexedDB("dbName", dbConfig, true);

最后一个参数将启用日志记录,所有日志结果都将打印在控制台输出中。

另一种方法是

linq2indexedDB.prototype.utilities.debug(true);

如果您对 linq2indexeddb 有任何其他问题,请告诉我。我写的 ;)

于 2013-03-08T10:25:43.177 回答
1

这在我使用的 linq2indexedDB 版本中是一个小问题。常量IDBTransaction.READ_ONLYIDBTransaction.READ_WRITE已弃用(ref)。快速搜索和替换,用字符串替换上面的内容'readonly''readwrite'分别为我解决了这个问题。

Kristof 提到可能还有一个 shim 来处理这个问题,但我似乎在从codeplex下载的最新版本中没有这个。

于 2013-03-08T12:10:24.817 回答