2014-11-07 2 views
2

나는 here과 비슷한 맞춤형 검사기를 만들었습니다.메시지 내부의 녹아웃 사용자 정의 검사기에서 매개 변수를 사용할 수 있습니까?

유효성 검사기의 의도는 다른 장소에서 사용할 수있을만큼 충분히 포괄적 인 것입니다. 이 특정 인수는 전달 된 파일 형식 확장자의 유효성을 검사하고 관찰 가능 파일이 유효한 파일 형식 인 경우 true를 반환합니다. 이 파일 형식을 포함하는 사용자 지정 오류 메시지를 전달하여 사용자에게 어떤 확장명을 사용할 수 있는지 알려줍니다. 당신이 볼 수 있듯이 IE

ko.validation.rules['validateFileTypeExtensions'] = { 
    validator: function (fileName, validExtensions) { 
     var isValidExtension = false; 
     var extension = fileName.split('.').pop(); 
     validExtensions.forEach(function(validExtension){ 
      if(extension == validExtension) 
       isValidExtension = true; 
     }); 
     return isValidExtension; 
    }, 
    // At this point message does not have access to the validExtensions 
    // that were passed into the validator. Is there a way to get them here? 
    message: 'Please chose a file with an acceptable extension ({0}).' 
}; 

ko.validation.registerExtenders(); 

//the valid file extensions are passed into the validator. 

var myCustomObj = ko.observable().extend({ validateFileTypeExtensions: ['xls', 'xlsx'] }); 

은 '메시지'는 validExtensions 변수에 액세스 할 수 없습니다. 유효성 검사기에서 그 값에 액세스하는 것을 인식하지 못하는 방법이 있습니까?

답변

2

값은 메시지 문자열의 {0} 자리에 삽입됩니다. 메시지의 형식을 제어하기를 원하면 메시지를 형식이 지정된 메시지를 반환하는 함수로 만드십시오.

예를 들어, 완전히, 오히려 확장에 일반 매개 변수에 전달하는 대신, 확장기에서 메시지를 무시하여 params 및 수정 message와 함께 발리 구성에 전달하려는 경우

ko.validation.rules.myValidator = { 
    validator: function (...) { 
     ... 
    }, 
    message: function (params, observable) { 
     return 'invalid, was expecting ' + params + ' but got ' + observable(); 
    } 
}; 

.

var obs = ko.observable().extend({ 
    myValidator: { params: 123, message: 'oops' } 
}); 
+0

메시지에 대한 기능을 사용하는 것이 실제로 효과가 있습니다. 이는 유효성 검사기로 원래 보낸 매개 변수를 캡처합니다. 감사! 이것은 또 다른 질문을 제기했지만 ... '메시지'는 오직 1 개의 매개 변수 만 허용됩니다. 이 매개 변수는 유효성 검사기로 전송 된 params이며, 두 번째 매개 변수를 사용하면 (예에서와 같이) 정의되지 않습니다. 그러면 어떻게 메시지에서 관찰 가능한 내용에 액세스 할 수 있습니까? – leigero

+1

죄송합니다, 제 버전이 섞여있을 수 있습니다. 근원에서 알 수있는 한 최대 녹아웃 유효성 확인의 두 번째 매개 변수가 있어야합니다. 두 번째 매개 변수는 유효성을 검사 할 관찰 가능 항목이어야합니다. 이전 버전에는이 매개 변수가 없을 수 있습니다. [2013 년 12 월 12 일 빌드] (https://github.com/Knockout-Contrib/Knockout-Validation/commit/2326fda57b9e1e5e500e51296c756572187ee455)에 추가 된 것 같습니다. –