2016-09-24 59 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