ノックアウト計算オブザーバブル関数と toJSON 関数に問題があります。Fiddle Exampleを作成しました。この例では、私はモデルを持っています:
function VM()
{
this.Name = ko.observable("Tom");
this.Age = ko.observable(23);
//I want this computed evaluate only
//when name will change. So i put Name observable
//inside it.
ko.computed(function(){
this.Name();
//send only after dom is initiallized
if(initialized){
Server.Sync(this);
}
}, this).extend({ throttle: 500 });
}
function Server()
{
}
Server.Sync = function(data)
{
alert("send");
var jsonData = ko.toJSON(data); //This is the problamatic code which..
//increases the computed dependency. After executing this code the..
//computed function is now evaluates on Age also which i do not want.
//send jsonData
};
このモデルでは、ユーザーが Name observable プロパティを変更した場合にのみ、計算された評価が必要です。Server.Sync関数が実行されるまでは正常に動作します。Sync関数では、 toJSON関数を介して ViewModel オブジェクトから JSON オブジェクトを作成しています。このコードは最初にオブザーバブルをアンラップし、 Stringify を介して JSON を作成するよりもクリーンな Js オブジェクトを作成します。ここで、オブザーバブルをアンラップしているときに、計算されたオブザーバブルの Age オブザーバブルの依存関係が増加し、ユーザーが Age プロパティを変更するたびに評価していると思います。
私の解釈が正しい場合、どうすればこれを回避できますか?