2011-11-11 31 views
1

利用this tutorial我想看看我是否可以通過與indexedDB緩存與大網格節省帶寬。存儲與indexedDB three.js網格對象

所以裝載機回調函數內我做...

object = new THREE.Mesh(geometry, material); 

webkitIndexedDB.open("MyNewDB").onsuccess = function(event) { 
    window.db = event.srcElement.result; 

    window.db.setVersion("1.0").onsuccess = function(event) { 
    var objectStore = window.db.createObjectStore("meshes", { keyPath: "item_id" }); 

    objectStore.add({item_id: 0, mesh: object}); // <= this is the crucial line 

    }; 
}; 

但是其中包含object的對象添加到數據庫中的最後一行導致以下錯誤。

Uncaught Error: DATA_CLONE_ERR: DOM Exception 25

我不知道這到底是什麼意思,但必須有變通的辦法沒有?

回答

4

這意味着您的THREE.Meshobject格式不正確,但不以違反索引,唯一性或類似的任何方式。當我嘗試存儲具有未執行的函數作爲成員的對象時,我看到此錯誤。

技術定義從the spec是:被存儲

的數據不能由所述內部結構 克隆算法進行克隆。

如果您試圖存儲您被命名的命名空間的對象狀態。如果你正在存儲明文數據,我會嘗試做一個THREE.Mesh()對象的深層副本,檢查'功能'typeof

編輯:我進一步瞭解了這一點。 IndexedDB使用HTML5 structured clone algorithm將對象複製到對象存儲中。根據the spec,錯誤和函數對象不能被克隆,並拋出一個DATA_CLONE_ERR。這就是你所看到的。