1

このチュートリアルを利用して、indexedDBでキャッシュすることにより、大きなメッシュで帯域幅を節約できるかどうかを確認しようとしています。

だから私がやっているローダーコールバック関数の中で...

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

1 に答える 1

4

これは、あなたTHREE.Mesh objectが不正な形式であることを意味しますが、インデックスや一意性などに違反するような方法ではありません。実行されていない関数を持つオブジェクトをメンバーとして格納しようとすると、このエラーが表示されます。

仕様からの技術的な定義は次のとおりです。

保存されているデータは、内部の構造化されたクローン作成アルゴリズムによってクローンを作成できませんでした。

名前空間のオブジェクトの状態を保存しようとしている場合は、うんざりしています。プレーンデータを保存している場合は、THREE.Mesh()オブジェクトのディープコピーを実行しtypeofて「関数」をチェックしてみます。

編集:私はこれをさらに調べました。IndexedDBは、HTML5構造化クローンアルゴリズムを使用してオブジェクトをオブジェクトストアにコピーします。仕様によると、ErrorオブジェクトとFunctionオブジェクトを複製して、をスローすることはできませんDATA_CLONE_ERR。それはあなたが見ているものです。

于 2011-11-15T01:53:30.823 に答える