我有以下代码:
this.getChildren = function (db, parentId, foldersOnly, callback, finishedCallback) {
var transaction = db.transaction("tree", "readonly");
var objectStore = transaction.objectStore("tree");
var handleResult = function (event) {
var cursor = event.target.result;
if (cursor) {
callback(cursor.primaryKey, cursor.value);
cursor.continue();
} else {
finishedCallback();
}
};
if (foldersOnly) {
// Only find records with the correct parentId and IsFolder == 1
var range = IDBKeyRange.only([parentId, 1]);
var index = objectStore.index('ParentId IsFolder');
index.openCursor(range).onsuccess = handleResult;
} else {
var range = IDBKeyRange.only(parentId);
var index = objectStore.index('ParentId');
index.openCursor(range).onsuccess = handleResult;
}
};
如果foldersOnly为false,则它适用于所有浏览器。但如果我传入真实,那么它在IE中不起作用。我只是得到了数据错误'回来。
我也试过
var range = IDBKeyRange.bound([parentId, 1], [parentId, 1]);
有人有任何建议吗?
编辑:
这些是索引的创建方式:
treeObjectStore.createIndex("ParentId", "ParentId", { unique: false });
treeObjectStore.createIndex("ParentId IsFolder", ['ParentId', 'IsFolder'], { unique: false });
答案 0 :(得分:4)
IE不支持复合索引。
编辑:
要解决此问题,请尝试在对象中创建单个属性,并在此属性上创建单个索引。在你的情况下,尝试像路径&#39 ;?您必须使所有bizlogic周围的添加/更新复杂化,确保每次更新此派生字段,但至少它可以工作。
例如,尽管很烦人,但要创建一个派生的字符串属性,其中包含每个对象的值:ParentId +':' +(IsFolder?' 1':' 0')。
答案 1 :(得分:4)
IE有一个新的polyfill,它的行为与标准相似: