2

我正在尝试询问有关在页面加载时运行的 async knockout.js 验证的问题,并且我正在尝试在 jsfiddle 上重现该问题。

问题是,尽管在我的盒子上运行了一个更复杂的场景,但我无法让最基本的示例工作。这有什么问题?

http://jsfiddle.net/C5rSm/4/

我必须发布代码:

<div id="vm">
    <input type="text" data-bind="value: validatableField" />
    <p data-bind="validationMessage: validatableField"></p>
    <button data-bind="click: alertValue">value is alerted ok, but doesn't validate</button>
</div>

var Vm = function(){
    var self = this;
    self.validatableField = ko.observable().extend({ equal: 2 });
    self.alertValue = function(){
        alert(self.validatableField());
    };
};

ko.applyBindings(new Vm(), document.getElementById('vm'));
4

1 回答 1

4

您的代码没有任何问题。

但是(cdnjs 1.0.2 )上的验证插件的当前版本已经很老了,并且它有一个阻止ko.validation.registerExtenders正常工作的错误。从那时起,此错误已得到修复。

作为一种解决方法,您需要ko.validation.registerExtenders()在小提琴开始时调用:

ko.validation.registerExtenders();
var Vm = function(){
    var self = this;
    self.validatableField = ko.observable().extend({ equal: "2" });
    self.alertValue = function(){
        alert(self.validatableField());
    };
};

ko.applyBindings(new Vm(), document.getElementById('vm'));

演示JSFiddle

于 2013-07-23T06:28:55.167 回答