1

私は何ヶ月もノックアウト.jsを使用してきましたが、モデルをシリアル化するときに呼び出すときに関数を呼び出すことに気付きました.ko.toJS

これにより、無限ループなどの明らかな問題が発生する可能性があり、最悪の場合、副作用のある関数が呼び出された場合に危険なデータ破損が発生する可能性があります。

この動作は、Knockout の以前のバージョンで一時的に変更されましたが、関数をコピーしたい場合があるため、設計によるものとして取り消されたようです。

まあ、私は決してしません(私はそうは思いません)、toJS私の関数を呼び出さない呼び出しができる方法を本当に感謝しています。

toJSON代わりに使用できることはわかっtoJSていますが、次のようなことをしたい場合には、本当にしたいことがあります:

toJSON = () =>     // this is typescript syntax
{
     var copy = ko.toJS(this);

     // remove credit card details if not selected payment type
     if (this.paymentType() != 'CreditCard')
     {
         delete copy.creditCardDetails;
     }

     return copy;
}

あるいは、オブジェクトを必要とするユーティリティ メソッドにモデルを渡しているのかもしれません。

ビューモデルでの関数の呼び出しが構成可能ではない理由が最終的に理解できないと思います。「モンキーパッチ」または新しいtoJS2関数を作成する簡単な方法があれば、それができるようになりたいです。

この質問には非常に役立つ情報がいくつかあります。ノックアウト マッピングで計算されたプロパティなしで ko.toJs メソッドを使用するにはどうすればよいですか? しかし、文字列に変換するのではなくオブジェクトを保持したい場合、まだ解決策が見つかりません。

4

2 に答える 2

3

将来の参考のために(そして私は時々同じ問題に遭遇しました)、メソッドを無視するマッピングを作成できます:

var mapping = {
    'ignore': ['load', 'reset', 'onSubmit']
};
var data = ko.mapping.toJS(object, mapping);
于 2014-07-21T08:09:01.130 に答える