2016-09-24 53 views
0

看看下面的小提琴使用knockoutjs和敲除验证一个简单的形式。如果最初单击“开始”,为什么不显示验证消息?为什么不需要敲除验证初始工作?

的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验证器插件是在更改值时触发的。在初始加载时,输入的值为空,并且定义的click事件不会更改此值,从而强制验证程序触发。

相反,在你去点击事件,尝试调用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