2014-02-12 1 views
0

Knockoutjs 3.0.0과 Knockoutjs-Validate를 사용합니다. 대부분 잘 작동합니다. 부분보기 모델의 유효성 검사를 시도 할 때 문제가 생겼습니다. 이처럼 :Knockoutjs는 계열 클래스의 유효성 만 확인합니다

function DataViewModel() { 
     var self = this; 

     self.username = ko.observable("").extend({ required: {message:"User name is required!" }}); 
     self.password = ko.observable().extend({ required: {message:"Password is required!" }}); 

     self.login = function() { 

      if (self.isValid()) { 
       self.errors.showAllMessages(); 
       return false; 
      } 
      $("#loginform").submit(); 
     }; 
    } 

와 나는 또한 페이지 속성을 제어하는 ​​페이지 뷰 모델이있다.

function PageViewModel(){ 
    var self=this; 
    self.contentheader=ko.observable("Login"); 
    self.usernamelabel = ko.observable("User Name"); 
    self.passwordlabel = ko.observable("Password"); 
    } 

나는이 같은 뷰 모델을 만들 : 마지막으로

function ViewModel() 
    { 
    var self=this; 
    self.data= ko.validatedObservable(new DataViewModel()); 
    self.page= new PageViewModel(); 
    } 

내가 KO로 결합 var에 VM을 = 새로운 뷰 모델(); ko.applyBindings (VM);

DataViewModel에서 내가 전달하는 데이터 또는 서버에서로드 할 페이지 뷰 모델이 페이지를 제어합니다. 사용자가 데이터를 서버에 제출할 때 DataViewModel의 유효성을 검사해야합니다. 하지만 작동하지 않습니다,이 같은 KO 모델 레이즈 오류를 봤어요

TypeError: obsv is undefined 

누구든지 도움이 될 수 있습니까?

답변

1

귀하의 경우 해당 모델 내의 DataViewModel에 대한 유효성 검사를 처리 할 수 ​​있습니다. 그래서

self.errors = ko.validation.group(self);

처럼 검증을 추적하는 모델 내에서 관찰을 추가하고 대신 검증 관찰의 정상적인 ko.observable로 기본 뷰 모델에 DataViewModel 인스턴스를 변경합니다. 나는 made a fiddle with the complete code입니다.

+0

이것은 작동합니다. 하지만 또 다른 문제가 있습니다. 브라우저에서 사용자 이름과 비밀번호를 복원하면 knockoutjs-validate가 작동하지 않습니다. – Ericyu67

+0

@ Ericyu67 원래 질문에 편집 할 때 필드 값을 복원하는 코드를 게시 할 수 있습니까? – rwisch45

+0

샘플 코드를 테스트했지만 일부 값을 입력 한 경우에만 작동합니다. 하지만 텍스트 상자에 복사/붙여 넣기 값을 입력하면 유효성 검사를 트리거 할 수 없습니다. 어쩌면 여기서이 질문을 할만한 곳이 아닐 수도 있습니다. – Ericyu67

관련 문제