2011-09-16 10 views
1

Knockoutで複数のトリガーを管理する最良の方法は何ですか?下記の従属変数は、配列内の旅行者の数が変更されたとき、または選択されたグループタイプが変更されたときにトリガを起動します。私は変更を加えた場合、私はすることが、その可能性をselectedGroupTypeするようKnockoutJS - 複数のトリガーを管理する

viewModel.selectedGroupType.subscribe(function(groupType) { 
    switch(groupType) 
    { 
     case "Individual": 
      // changes traveller quantity to 1 
      break; 
     case "Couple": 
      // changes traveller quantity to 2 
      break; 
     case "Family": 
      // changes traveller quantity to 3 
      break; 
     default: 
      break; 
    } 
}, viewModel); 

私はポジションにいる:私は旅行者の数を変更することができますselectedGroupType上のサブスクリプションを持っているしかし

var ajaxTrigger = ko.dependentObservable(function() { 
    this.selectedGroupType(); 
    this.travellers(); 
    alert("triggered"); 
}, viewModel); 

トラベラーの数量が変更された場合、第2のトリガーを取得します

しかし、grouptypeと旅行者数の両方が決定された後に、ただ1回のトリガーコールが必要です。

これをラウンドするにはどうすればよいですか?

答えて

0

私はスロットルを調べます。

http://blog.stevensanderson.com/2011/08/31/knockout-1-3-0-beta-available/

// Will not notify changes faster than once per 500ms 
var myObservable = ko.observable("initial value").extend({ throttle: 500 }); 

// Will not re-evaluate *or* notify changes faster than once per 500ms 
var myDependentObservable = ko.dependentObservable(function() { 
    // Evaluation logic goes here, usually referencing other observables 
    return 123; 
}).extend({ throttle: 500 }); 
+0

おかげマーク:スティーブサンダーソンさんのブログ上のアイテム6を見てみましょう。最新バージョンをダウンロードします。 – BrightonDev

+0

私は1000msのスロットルを追加しようとしましたが、Ajaxリクエストは、ページがレンダリングされるとすぐに1回、次に1秒後に再び行われます。 Ajaxリクエストの呼び出しは従属オブザーバブルから行われ、他のオブザーバブルへの参照をすべて削除しても、AJAXリクエストはまだ実行されています。var ajaxTrigger = ko.dependentObservable(function(){ GetPrices(); } ).extend({throttle:1000}); – BrightonDev

+1

これは、ko.dependentObservables(現在はko.computedと呼ばれています)を使って、この質問で起こった人を助けるのに本当に古くなっていることは分かっています。私が非常によく似た状況でやったのは、初期化された変数がviewModelの真下に設定され、ko.computedの呼び出しでバインドしたいオブザーバブルですが、呼び出す前に必ず初期化されているかどうかを確認します私は最初の評価中にajax呼び出しをトリガーしません。 – MHollis

関連する問題