2014-02-28 5 views
0

Knockout-Validation과 함께 KnockoutJS 2.2.1을 사용하고 있습니다. 유효성 검사와 사용자 지정 익스텐더를 만드는 데 방해가되는 알려진 버그가 있습니까?녹아웃 유효성 검사가 사용자 정의 익스텐더를 방해합니까?

어떻게 든 나는 사용자 정의 익스텐더를 추가 할 수 없기 때문에. 이 코드를 실행하려고하면 : reportDate 그는

Uncaught TypeError: Cannot read property 'rules' of undefined

나요 누군가를 "정의되지 않은 규칙"을 찾을 수없는, 내 익스텐더, 녹아웃 - 유효성 검사에 문제가있는 것입니다

self.from = ko.observable(new Date()).extend({ reportDate: { timeZoneValue: self.timeZoneValue} }); 

이 문제가 있었나요? 그것을 해결하는 방법? 여기

는 reportDate 연장하는 코드이다

ko.extenders.reportDate = function (target, options) { 
var lastValidValue = new Date(); 

target.subscribe(function (newValue) { 
    if (newValue == null) { 
     target(lastValidValue); 
    } else { 
     lastValidValue = newValue; 
    } 
    var isoDate = moment(DateProvider.adjustDateFromTimeZoneToUtc(target(), options.timeZoneValue())).toISOString(); 
    target.ISODateString = isoDate; 
}); 

};

녹아웃 유효성 검사의 맞춤 규칙이 여기에 문제가 될 수 있는지 궁금합니다. 특히 그것이 무엇인지 명확하지 않은 registerExtenders() 함수.

$(function() { 
ko.validation.init({ 
    insertMessages: true, 
    decorateElement: true, 
    errorElementClass: "error", 
    errorMessageClass: "validation-message", 
    grouping: { observable: true, deep: true } 
}); 

ko.validation.registerExtenders(); 

});

+1

일반적으로 Extender는 나란히 작업해야하지만 사용자 정의 Extender 구현에 따라 다르므로 'reportDate' 코드를 게시 할 수 있습니까? 또한 샘플에서 ko.validaiton을 사용하는 위치/방법을 볼 수 없으므로 예제를 확장하여 유효성 검사 플러그인을 사용하는 방법을 보여줄 수 있습니까? jsfiddle repro가 문제를 해결하는 데 가장 이상적 일 것입니다 ... – nemesv

+0

자세한 내용을 추가했습니다 –

답변

3

문제는 익스텐더가 관찰 가능을 반환하지 않는다는 것입니다. the documentation on extending observables에서 :

It can then either return the observable or return something new like a computed observable that uses the original observable in some way.

그래서 당신은 (다른 관찰 개체를 반환하려는 경우가 아니면이 경우 물론 대신 할 당신이해야) 익스텐더의 마지막 코드 라인으로 다음 줄을 추가 problaby해야합니다

return target; 
+0

대단히 감사합니다! 내가 관찰 할 수있는 목표를 되 돌리는 것이 필요한지 궁금해하고 있었지만, 반드시 그것을 돌려 주어야한다는 것은 분명하지 않았다. 그리고 녹아웃 유효성 검사는 나를 더욱 미혹시킵니다. –

+0

@TomaszSikora 메소드 호출에서 관찰 가능을 리턴해야하는 이유는 추가 된 다음 익스텐더가 Extender에서 리턴 값을'target'으로 수신한다는 것입니다. 따라서 어떤 객체도 반환하지 않으면 대상이 정의되지 않아보고 있던 오류가 발생합니다. 또한, 확장 메서드는 마지막 extender에서 반환 된 값을 반환 할 것이라고 믿습니다. –

관련 문제