淘汰验证 - 自定义模板验证邮件不会更改

时间:2014-11-11 12:39:45

标签: data-binding knockout.js knockout-validation validationmessage

我在JSFiddle中设置了一个示例,http://jsfiddle.net/4stu2jg3/63/

在第一个文本框中,如果添加非数字编号并单击该按钮,则会显示所需的消息。我会假设这应该显示数字消息,因为有一个值?

在第二个文本框中,如果删除字符串并单击按钮,则会显示数字消息。我希望这会显示所需的消息?

如果您注释掉自定义模板,一切都会按照我的预期运行。我不确定我做错了什么?

<div id="test">
    <div><input data-bind="value: first" /></div>
    <div><input data-bind="value: last" /></div>

    <input type="button" value="Validate" />
</div>

<script type="text/html" id="qmsKoValidationTemplate">
    <span class="qms-val-panel" data-bind="visible: field.isModified() && !field.isValid(), text: field.error"></span>
</script>

ko.validation.init({
    registerExtenders: true,
    messagesOnModified: true,
    insertMessages: true,
    parseInputAttributes: false,
    messageTemplate: "qmsKoValidationTemplate"
});

var t = function() {
    var self = this;

    self.first = ko.observable()
        .extend({required: { message: 'Required' } })
        .extend({number: { message: 'Number' } });

    self.last = ko.observable('Del')
        .extend({required: { message: 'Required' } })
        .extend({number: { message: 'Number' } });
}

var s = new t();

ko.applyBindings(s, document.getElementById('test'));

$('input[type="button"]').click(function() {    
    //console.log(s.first(), s.last());
    //console.log(ko.validatedObservable(s).isValid())
    ko.validatedObservable(s).isValid()
});

1 个答案:

答案 0 :(得分:1)

使用一点调试,ko.isObservable(field.error)返回false,这将解释&#34;不改变&#34;这方面的问题。

仔细观察,custom binding validationMessage将在默认模板中使用。用这个自定义绑定替换text绑定似乎可以提供所需的行为。

<span class="qms-val-panel" data-bind="visible: field.isModified() && !field.isValid(), validationMessage: field">        
</span>

Modified fiddle