2011-11-16 4 views
6

변경된 값에 대해 한 번 메서드를 호출하는 방법이 있습니까? 내가 어떤 가치 MyMethod라는이 dependencyObservable 올 becuase 두 번 호출 변경할 때 값에 대한 사용자 지정 메서드 호출 변경

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(); 
    } 
} 

이 Unfortunatelly도 변경됩니다 :이 메소드를 호출하는 bindingHandlers.value에 대한 래퍼를 만들었습니다. 어떤 아이디어? 방금 변경 값에 가입하고자 할 경우

답변

8

, 당신은 어떤 관찰에 가입 할 수 있습니다 :

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

I :

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

당신이 뭔가를 할 수있는 개체의 모든 속성에 가입하려면 약 20 개의 속성을 가진 객체가 필요한 임대 계산기가 있고이 viewModel을 매개 변수로이 계산기에 전달하고 싶습니다. 따라서 대부분의 속성을 구독하고 싶습니다. –

+0

당신은 언제나 'observable' 또는'observableArray' 호출의 속성을 반복 할 수 있습니다 (쉬운 방법은 각 속성에'subscribe' 함수가 있는지 테스트하는 것일 수도 있습니다) –

+0

'subscribeAll' 메쏘드는 깊은 그래프를 쓰지 않고, 얕은 그래프 만하는 것을주의하십시오. –

관련 문제