0

オブザーバブルを IndexedDB に保存すると、DataCloneError が発生します。

例:IDBWrapper の使用: https://github.com/jensarps/IDBWrapper

store = new IDBStore({
    storeName: 'myStore',
    keyPath: 'Id',
    autoIncrement: true,
    onStoreReady: loadCallback
});

...

var myObservable = ko.observable("value");

...

store.put(myObservable, refreshCallback);

これを回避する最善の方法は何でしょうか? 誰もまだこれに取り組んでいますか?

オブザーバブルと非オブザーバブルを含むオブジェクトのかなり複雑な observableArray があるため、値を取得するだけでは少し繰り返しになります。

アップデート:

これまでのところko.toJS、有望な ( http://knockoutjs.com/documentation/json-data.html ) を試してみましたが、一部のオブザーバブルで isDirty フラグも使用しているため (ここを参照してください: http://www.knockmeout .net/2011/05/creating-smart-dirty-flag-in-knockoutjs.html )これは関数に変換されるので、とにかく手動で処理する必要があります...ko.toJSON全体が文字列化されるようにすることができましたしかし、各値を手動で設定するのに比べて、それを観測可能な形式に変換するのは難しいでしょうか?

だから現在、私はこれをやっています:

var myObservable = ko.observable("value")

...

var plainValue = myObservable();
store.put(plainValue, refreshCallback);

私だけがさまざまな内容の observableArray を持っているので、値が観察可能かどうかを確認するために多くのチェックを行う必要があります。少し乱雑に見えます。より良い方法はありますか?

4

1 に答える 1

1

DataCloneError occur when the object could not be serialized. I prefer plain old javascript object (JSON) to store in indexeddb. So, your solution is preferable. Generally I will have constructor for myObservable from JSON serialized object. It is clean and future proof. For some reason, if you want to change myObservable, you can still instantiate from old and new JSON.

于 2013-09-29T02:42:45.187 に答える