Tôi đang cố gắng tạo một IndexedDB thực sự đơn giản với một số JavaScript, nhưng nó không thành công trong trình xử lý đã có. Dường như trình duyệt (Chrome 57) không thể parsekeyPath
(trong Basic Concepts) bộ nhớ của tôi.Đường dẫn khóa không hợp lệ trong IndexedDB: hạn chế?
Tôi đang theo dõi nhiều ví dụ đơn giản sau: MDN hoặc Opera-Dev.
Giả sử tôi muốn lưu trữ đối tượng như thế này trong DB:
{
"1": 23, // the unique id
"2": 'Name',
"3": 'Description',
"4": null,
"5": null
}
Đây là mã:
var sStoreNodes = 'nodes';
var sIdFieldNode = '1'; // the important part
// event is fired for creating the DB and upgrading the version
request.onupgradeneeded = function(event)
{
var db = event.target.result;
// Create an objectStore for nodes. Unique key should be the id of the node, on property 1.
// So ID will be the key!
var objectStore = db.createObjectStore(
sStoreNodes,
{
// changing to a plain string works, if it is a valid identifier and not just a strigified number
'keyPath' : [ sIdFieldNode ],
'autoIncrement' : false // really important here
});
};
Thông báo lỗi đọc như:
của router DOMException : Không thể thực thi 'createObjectStore' trên 'IDBDatabase': Tùy chọn keyPath không phải là một đường dẫn khóa hợp lệ. tại IDBOpenDBRequest.CCapIndexedDB.request.onupgradeneeded
Tôi cũng có thể cố gắng bỏ qua con đường quan trọng, nhưng tôi tự hỏi tại sao điều này xảy ra và muốn tôi có thể làm gì về nó, nếu tôi thực sự cần phải sử dụng một (phức tạp) đường dẫn quan trọng.
Về spec:
Tôi không chắc chắn, cho dù this thể được áp dụng ở đây:
Một giá trị được cho là một chìa khóa hợp lệ nếu nó là một trong những ECMAScript sau [ECMA -262] loại: Số nguyên giá trị, Chuỗi giá trị nguyên thủy, Đối tượng ngày hoặc Đối tượng mảng.
và những gì this thực sự có nghĩa là:
Nếu đường dẫn chính là một DOMString, giá trị [để nhận được đường key] sẽ là một DOMString bằng con đường trọng điểm. Nếu đường dẫn chính là một chuỗi, giá trị sẽ là một mảng mới, được điền bằng cách nối các chuỗi bằng với mỗi DOMString trong chuỗi.
Sửa này hoạt động, nếu bạn không sử dụng một số chuyển đổi thành chuỗi, nhưng một chuỗi thay vào đó, mà là một định danh hợp lệ (bắt đầu với một nhân vật [a-zA-Z]). Vì vậy, 'keyPath' : 'b'
là OK. Tôi đoán đây là vì giá trị này được sử dụng để tạo đường dẫn như a.b.c
.