2014-02-12 2 views
0

Я использую Knockoutjs 3.0.0 и Knockoutjs-Validate, в большинстве случаев они работают хорошо. Теперь у меня проблема, когда я пытаюсь проверить частичную модель просмотра. Как это:Knockoutjs только проверять класс chind

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(); 
     }; 
    } 

и у меня также есть страница ViewModel которые контролируют атрибут страницы.

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

Я создаю ViewModel, как это:

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

я, наконец, связываются с KO уаг Vm = новый ViewModel(); ko.applyBindings (vm);

Почему я делаю такую ​​программу, как это: в DataViewModel, я храню данные, которые будут проходить или загружаться с сервера, модель просмотра страницы Я управляю этой страницей, я должен сделать проверку на DataViewModel, когда пользователь отправляет данные на сервер. Но это не работает, я видел ошибку повышения модели KO, например,

TypeError: obsv is undefined 

Любой может помочь?

ответ

1

В вашем случае вы можете обработать валидацию для своего DataViewModel внутри этой модели. Добавить наблюдаемый в модели для отслеживания проверки, например, так

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

и изменить свой DataViewModel экземпляр в основном ViewModel быть нормальным ko.observable вместо подтвержден наблюдаемым. У меня made a fiddle with the complete code.

+0

Это работает. Но у меня другая проблема. Когда имя пользователя и пароль восстанавливаются из браузера, функция knockoutjs-validate не работает. – Ericyu67

+0

@ Ericyu67 Не могли бы вы уточнить (возможно, опубликовать некоторый код, который восстанавливает эти значения полей при редактировании исходного вопроса)? – rwisch45

+0

Я проверил ваш пример кода, он работает только в том случае, если я нахожу какое-то значение. Но когда я пытаюсь скопировать/вставить значение в текстовое поле, он не может активировать проверку. Может быть, здесь не место, чтобы задать этот вопрос. – Ericyu67

Смежные вопросы