我在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()
});
答案 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>