2016-09-30 7 views
1

私はいくつかのノックアウトコンポーネントを持つアプリケーションを持っています。ノックアウトコンポーネントは、すべてボタンクリックで更新されるサブスクライブ可能なセットにバインドされています。各コンポーネントには、サブスクライバの変更をリッスンするいくつかのサブスクライブ関数があり、サブスクライバの変更はそのサブスクライバに含まれる更新関数を呼び出します複数のサブスクリプションを更新しますが、ノックアウトで更新を1回だけ実行しますか?

複数のユーザが更新されたときに一度更新機能を呼び出すように設定するにはどうすればよいですか?私はサブスクライブ機能を置き換える場合

this.OBSERVABLE_NAME.subscribe(function() { this.updateChart(); }, this); 
this.OBSERVABLE_NAME.subscribe(function() { this.updateChart(); }, this); 
this.OBSERVABLE_NAME.subscribe(function() { this.updateChart(); }, this); 
this.OBSERVABLE_NAME.subscribe(function() { this.updateChart(); }, this); 

this.updateChart = function() { 
    $.ajax({ 
     type: "POST", 
     traditional: true, 
     url: this.ajax_location, 
     data: this.ajax_parameters, 
     success: function (data) { 
      // DO SOMETHING 
     }.bind(this), 
     error: function (returndata) { 
      alert("Error:\n" + returndata.responseText); 
     } 
    }); 
}; 

しかし、::

ko.computed(function() { 
     $.ajax({ 
     type: "POST", 
     traditional: true, 
     url: this.ajax_location, 
     data: this.ajax_parameters, 
     success: function (data) { 
      // DO SOMETHING 
     }.bind(this), 
     error: function (returndata) { 
      alert("Error:\n" + returndata.responseText); 
     } 
    }); 
}, this).extend({ throttle: 1 }); 

要求どおりに動作しているようです。ここ

は私のコンポーネントのほとんどは、負荷方法のサンプルスニペットです。私はスロットルが減価償却されていることを知っていますが、遅延が適切に機能していないように見えるのは不思議です。

+0

サンプルコードがありますか?これは遅れた更新のユースケースのように聞こえるが、コードスニペットや例がなければ言うことは難しい。 –

+0

コードサンプルで質問を更新しました。 –

答えて

0

を使用して、観察を拡張することができます。私の場合、延期は適切に機能していないようでしたが、それを抑制しました。次のスニペットを使用します。

ko.computed(function() { 
     $.ajax({ 
     type: "POST", 
     traditional: true, 
     url: this.ajax_location, 
     data: this.ajax_parameters, 
     success: function (data) { 
      // DO SOMETHING 
     }.bind(this), 
     error: function (returndata) { 
      alert("Error:\n" + returndata.responseText); 
     } 
    }); 
}, this).extend({ throttle: 1 }); 
1

具体的な例がないと難しいですが、私はあなたがdeferred updatesを探していると思います。

あなたは、これはスロットリングや遅延更新のために良い使用であるように見えます.extend({ deferred: true })

+0

奇妙なことに、遅延更新はそれを修正するようには見えませんでしたが、抑制がありました。 –

関連する問題