为什么最初不需要敲除验证工作?

时间:2016-09-24 20:07:25

标签: javascript html knockout.js knockout-validation

在简单的表格上使用knockoutjs和knockout-validation查看以下小提琴。如果您最初单击“开始”,为什么不显示验证消息?

使用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

1 个答案:

答案 0 :(得分:1)

我认为这里的问题是目前没有任何东西可以触发验证器运行。

默认情况下,KO验证器插件会在更改值时触发。在初始加载时,输入的值为null,并且定义的click事件不会更改此值,从而强制验证器触发。

相反,在go go事件中,如果某些内容无效,请尝试调用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