2011-11-16 10 views
6

値が変更されたときに一度メソッドを呼び出す方法はありますか?生憎、私はいくつかの値にmymethodがdependencyObservableも変更されてくるbecuase 2回呼び出されたときに変更値のカスタムメソッドを呼び出す

var update = bindingHandlers.value.update; 

bindingHandlers.value.update = function(element, valueAccessor, allBindingAccessor, viewModel) { 
    var newValue = ko.utils.unwrapObservable(valueAccessor()); 
    var elementValue = ko.selectExtensions.readValue(element); 
    var valueHasChanged = (newValue != elementValue); 

    update(element, valueAccessor, allBindingAccessor, viewModel); 

    if (valueHasChanged) { 
     myMethod(); 
    } 
} 

:私は、このメソッドを呼び出すbindingHandlers.valueのラッパーを作成しました。何か案は?

答えて

8

変更したばかりの値をサブスクライブしたい場合には、すべての観測可能に購読することができます:私は

function subscribeAll(viewModel) { 
    for(var propertyName in viewModel) { 
     if(viewModel[propertyName].subscribe === 'function') { 
      viewModel[propertyName].subscribe(function(newValue) { 
       //do stuff 
      } 
     } 
    } 
} 
+0

:オブジェクトのすべてのプロパティを購読する

var viewModel = { property: ko.observable() }; viewModel.property.subscribe(function(newValue) { //do stuff }); 

次のような何かを行うことができます約20のプロパティを持つオブジェクトを必要とするリース電卓を持っています。私はviewModelをこの電卓にパラメータとして渡したいので、ほとんどのプロパティを購読したいと思います。 –

+0

いつでもプロパティと、 'observable'または' observableArray'呼び出しの 'subscribe'を繰り返すことができます(それぞれのプロパティに' subscribe'関数があるかどうかテストするのが簡単かもしれません) –

+0

私の答えはa 'subscribeAll'メソッドは、深いグラフではなく、浅いグラフであることに注意してください。 –

関連する問題