2016-09-24 5 views
0

簡単なフォームでknockoutjsとノックアウト検証を使用して、次のようなフィドルをチェックしてください。最初に「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であり、定義された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

関連する問題