2012-03-09 4 views
1

안녕하세요 저는 Knockoutjs에 익숙하지 않습니다. 예를 들어 전자 메일 주소가있는 양식을 게시하려는 시나리오에서 전자 메일 주소가 필요하다는 요구 사항이 있습니다. 독특한. 이메일 주소는 다음 고유 여부와 만약 내가 확인하는 서버에서 Knockoutjs 유효성 확인 및 서버 유효성 확인

예를 들어

{ isEmailUnique을 validationjson 클래스를 반환 거짓, isPasswordStrongEnough : 사실; }

knockoutjs 유효성 검사를 사용하면 어떻게 이러한 오류를 깔끔하게 표시 할 수 있습니까?

답변

4

뷰 모델의 다른 관찰 가능 항목에 영향을주기 때문에 두 개의 다른 서버 측 유효성 검사기를 사용합니다.

원래 당신이 당신 조회를 수행 POST 요청을 수락 엔드 포인트를 생성하고 쿼리의 결과에 따라 true 또는 false를 반환해야하는 서버에 그런 다음 knockout validation readme

ko.validation.rules['isEmailUnique'] = { 
    validator: function(val, param){ 
     var isValid = true; 

     $.ajax({ 
      async: false, 
      url: '/validation/isEmailUnique', 
      type: 'POST', 
      data: { value: val, param: param }, 
      success: function(response){ 
       isValid = response === true;    
      }, 
      error: function(){ 
       isValid = false; //however you would like to handle this    
      } 
     }); 

     return isValid; 
    }, 
    message: 'The Email is not unique' 
};    

에서 가져옵니다.

당신은 암호 강도 확인을 위해 매우 동일한 일을 사용할 수 위의 검증을

this.email = ko.observable() 
    .extend({ 
     isEmailUnique: { 
     message: 'Something else perhaps? It will override the message in the validator' 
     } 
    }); 

을 사용합니다.

이와 같은 유효성 검사기를 사용하면 관찰 값이 변경되면 유효성 검사가 실행되므로 유효성 검사를 수행하는 데 유용한 방법이 될 수 있습니다.

+0

나는 그 readme에서 그 게시물을 보았지만, 한 번의 호출로 제출할 때 모든 서버 측 유효성 검증을하고 싶습니다. 등록이 잘 되었다면, 틀린 것을 반환하십시오. – NPehrsson

+1

그런 경우에는 해당 특정 경우에 유효성 검사 플러그인을 전혀 사용하지 않아야합니다. 저장하려는 데이터를 POST하고 결과를 처리하십시오. 오류를 일으킨 필드 옆에 오류 메시지를 배치하려면 해당 규칙을 알아야합니다. 어쩌면 유효성 검사 json이나 바인딩 할 수있는 것을 필터링 할 수있는 계산 된 observables 일 수도 있습니다. 그러나, 녹아웃 유효성 검사는 거기 당신을 도울 수 없다. –

+0

: (okeay, 필자는 다른 것들을 필요에 따라 사용하고 싶었습니다. 따라서 서버에서 결과를 수신 할 때 유효성 검사 오류를 트리거하는 방법이 없습니다. – NPehrsson

2

약간 늦었지 만 2 센트에 해당하는 값으로, 서버 엔드 포인트 (예 :/레지스터)에서 표준 JSON 직렬화 AjaxResult 클래스를 데이터 (예 : 예를 들어 맵핑 플러그인으로 다시 바인딩하기 위해 업데이트 된 모델에 사용되는 임의의 컨테이너) 및 유효성 검증 메시지 문자열의 콜렉션 등을 포함 할 수 있습니다. 그런 다음 ObservableArray에 바인딩 된 HTML 유효성 검증 요약을 가질 수 있으며 푸시/맵핑 Ajax에서 보낸 메시지가 거기에옵니다. 이것은 본질적으로 내가 넉 아웃으로하고 있었던 일이며 멋지게 작동합니다.