2016-09-24 10 views
0

Ознакомьтесь со следующей скрипкой, используя нокауты и нокаут-валидацию на простой форме. Почему сообщение подтверждения не появляется, если вы нажмете «go» изначально?Почему проверка отката нокаутом не требуется?

Javascript:

var viewmodel = function() { 
    var self = this; 
    self.name = ko.observable(null).extend({ 
     required: true 
    }); 
    self.validation = ko.validatedObservable({ 
     name: self.name 
    }); 
    self.go = function() { 
     console.log(self.name()); 
     self.name.isValid(); 
    }; 
} 
ko.applyBindings(new viewmodel()); 

HTML:

<input type="text" data-bind="value:name" /> 
<button type="button" data-bind="click:go"> 
    go 
</button> 

Fiddle

+0

Что вы имеете в виду под "изначально"? Последующие клики не будут отображаться. – Jeroen

ответ

1

Я думаю, что проблема здесь в том, что не существует в настоящее время ничего, что вызовет валидатор для запуска.

Плагин для проверки подлинности KO по умолчанию запускается при изменении значения. При начальной загрузке значение вашего ввода равно NULL, и указанное событие клика не изменит это значение, заставив валидатор запускаться.

Вместо этого в вашем ходе события щелчка, попробуйте вызвать showAllMessages если что-то недействительно:

var viewmodel = function() { 
    var self = this; 
    self.name = ko.observable(null).extend({ 
    required: true 
    }); 
    self.validation = ko.validation.group([self.name]); 

    self.go = function() { 
    if(self.name.isValid()){ 
     console.log("I'm valid!"); 
     console.log("Name: " + self.name()); 
    }else{ 
     self.validation.showAllMessages(); 
    } 
    }; 
} 

ko.applyBindings(new viewmodel()); 

Fiddle

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

  • Нет связанных вопросов^_^