Knockout Validation不清除错误模板

时间:2014-05-02 16:24:22

标签: knockout.js knockout-validation

我在使用knockout.validation时遇到了一些麻烦。我目前的用户界面看起来有点像这样:

enter image description here

我遇到的问题是,即使viewModel.errors().length报告没有错误,图标似乎也不会消失,但文字确实如此。

enter image description here

我在我的错误中使用自定义模板,在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:

enter image description here

有人可以提出我可能做错的事情,以防止这些图标消失吗?我可以使用jQuery手动删除它们,但是我没有完全理解这个问题而犹豫不决。

1 个答案:

答案 0 :(得分:2)

我实际上已经设法通过一个小提琴找到解决方案,我偶然发现了。我拿出的data-bind="visible: field"位是所有重要方面。似乎field是上下文中的淘汰验证项目(这就是为什么我无法弄清楚它来自何处)。

直接绑定到field是错误的,这只是绑定到字段的值,这解释了为什么它总是在那里,除非你提供一个空值。但是,Knockout验证已将对象扩展为包含一些其他功能。具体来说,field.isValid()是重要的调用,可以在绑定中使用。

data-bind="visible: field.isValid()"