2014-05-01 3 views
5

시간이 포함 된 계산 된 속성에 바인딩 된 텍스트 입력 폼이 있습니다. 사용자가 값을 입력하면 총 분을 포함하는 정수 값으로 구문 분석됩니다.스로틀 된 계산 된 속성 업데이트 강제로

이것은 간단한 기능이 아니기 때문에 (시간 서식을 지정하는 방법은 여러 가지가 있음)이 속성의 값은 Throttle Extender입니다.

이 모든 것이 정상적으로 작동합니다. 사용자가 값을 입력하고 즉시 저장 버튼을 누르면 문제가되고, 스로틀 값은 아직 계산되지 않습니다.

self.totalMinutes = ko.observable(0); 
self.totalMinutesValue = ko.computed({ 
    read: function() { 
     return MinutesToFormat(self.totalMinutes()); 
    } 
    write: function(value) { 
     self.totalMinutes(FormatToMinutes(value)); 
    } 
}).extend({ throttle: 250 }); 

self.Save = function() { 
    // Send self.totalMinutes() to server, need to ensure the throttled 
    // computed has been written. 
} 

송신 방법에서 즉시 업데이트 할 속성을 강제하는 간단한 방법이 있나요? setTimeout을 추가 할 수는 있지만 이상적입니다.

+1

나는 스로틀을 많이 사용하지 않았지만 3.1에서는 rateLimit 익스텐더를 사용하는 것이 좋습니다. 아마도이 문제가 해결 될 것입니다 - http://www.knockmeout.net/2014/03/knockout-3-1 -released.html – 4imble

답변

4

rateLimiter가이 문제를 실제로 해결할 수있는 것 같습니다.

http://knockoutjs.com/documentation/rateLimit-observable.html

"이 지연되지 않습니다 관찰 가능한에 기록;의 관측 값이 바로 업데이트입니다 쓰기 계산 관찰 가능한 경우,이 쓰기 기능이 항상 바로 실행 것을 의미

..

valueHasMutated를 수동으로 호출 할 때를 포함하여 모든 변경 알림이 지연됩니다. 즉, valueHasMutated를 에 사용할 수 없음을 의미합니다. 변경되지 않은 값.

기본 속도 제한 방법은 스로틀 알고리즘과 다릅니다. 스로틀 동작을 일치하려면 notifyWhenChangesStop 방법을 사용하여 "

속도 제한 제한 속도되지 관찰 계산의

평가,.. 당신은 그 값을 읽으면 가 다시 평가합니다