我在使用knockout.validation时遇到了一些麻烦。我目前的用户界面看起来有点像这样:
我遇到的问题是,即使viewModel.errors().length
报告没有错误,图标似乎也不会消失,但文字确实如此。
我在我的错误中使用自定义模板,在JavaScript中定义如下:
// Setup knockout-validation
ko.validation.rules.pattern.message = 'Invalid.';
ko.validation.configure({
registerExtenders: true,
messagesOnModified: false,
insertMessages: true,
parseInputAttributes: true,
messageTemplate: 'errorMessage'
});
/// extend objects
viewModel.errors = ko.validation.group(viewModel);
我的错误模板是这样的:
<!--This is the template for an error message that will be used by ko.validation - it should display an icon followed by the error message-->
<script id="errorMessage" type="text/html">
<div class="validationMessage">
<i class="fa fa-exclamation-triangle"></i><em class="customMessage" data-bind='validationMessage: field'></em>
</div>
</script>
我实际上刚刚从<i>
的数据绑定中删除了data-bind="visible: field"
,因为这似乎没有正常工作。我也不完全确定field
来自何处 - 它可能是我忘记的ko.validation属性。这意味着即使没有错误,图标仍然显示,但是当字段为空时阻止图标显示,所以我有一条没有图标的"This field is required"
消息。
我的验证对象扩展到我的observable,如下所示:
validation : { required: true, number: true }
在执行期间查看我的viewModel:
有人可以提出我可能做错的事情,以防止这些图标消失吗?我可以使用jQuery手动删除它们,但是我没有完全理解这个问题而犹豫不决。
答案 0 :(得分:2)
我实际上已经设法通过一个小提琴找到解决方案,我偶然发现了。我拿出的data-bind="visible: field"
位是所有重要方面。似乎field
是上下文中的淘汰验证项目(这就是为什么我无法弄清楚它来自何处)。
直接绑定到field
是错误的,这只是绑定到字段的值,这解释了为什么它总是在那里,除非你提供一个空值。但是,Knockout验证已将对象扩展为包含一些其他功能。具体来说,field.isValid()
是重要的调用,可以在绑定中使用。
data-bind="visible: field.isValid()"