2014-03-30 2 views
1

모든 ViewModel에서 모든 관찰 가능 후에 호출 될 콜백 함수를 설정하는 방법을 찾고 있습니다.녹아웃의 모든 ViewModel에 대한 모든 관찰 가능 콜백 함수 설정

ajaxSendajaxComplete과 비슷한 점은 jquery이고 각 ajax 호출 후에 함수가 호출됩니다.

녹아웃에서 이와 비슷한 것을 찾은 후에 나는 단지 xplicitly subscribing to observablescomputed observables을 사용하여 몇 가지 사실을 발견했습니다. ViewModel이 많아서 모든 ViewModel에서 중복 된 코드가 강제로 적용될 것이기 때문에 이러한 문제 중 어느 것도 내 문제를 해결하지 못합니다.

어떤 모델에서든 관찰 가능 변경에 가입하려면 방법이 있습니까?

답변

1

당신은 이런 식으로 뭔가를 시도 할 수 :

1) 어떤 뷰 모델의 모든 관찰은 (첫 번째 매개 변수 변경 때 호출하려는 함수를 작성 - 이벤트 유형과 동일 - 두 번째 값을, subscribe 함수 세번째 파라미터)

function extendNotification(valueToNotify, event) { 
    if (event != "beforeChange") { 
     console.log("extend notification: " + valueToNotify); 
    } 
}; 

2) 만들어 헬퍼 래퍼 : Y와 ko.subscribable.fn.notifySubscribers 기능을 포장

function beforeWrapper(fnBefore, fnOriginal) { 
    return function() { 
     fnBefore.apply(this, arguments); 
     return fnOriginal.apply(this, arguments); 
    }; 
}; 

3) 우리 extender :

ko.subscribable.fn.notifySubscribers = 
    beforeWrapper(extendNotification, ko.subscribable.fn.notifySubscribers); 

귀하의 문제에 대한 최선의 해결책은 아니지만 원하는 경우 수정할 수 있습니다.
데모 Fiddle.