清除敲除验证错误
Posted
技术标签:
【中文标题】清除敲除验证错误【英文标题】:Clear error on Knockout-Validation 【发布时间】:2012-11-23 09:45:53 【问题描述】:我有一个使用 Knockout.js 并使用 Knockout-Validation 的页面设置。
在页面加载期间,我将另一个插件放在触发更改的选择框中,从而触发验证。我需要能够使用 JS 清除该错误,以便我可以从一个全新的 UI 开始,并就表单发布或选择框更改提供反馈。
我找不到任何可以清除敲除验证中的错误的内容。
【问题讨论】:
【参考方案1】:在淘汰验证中已经实现的一个更好的方法可能是说property.isModified(false);
如果您要重置整个视图模型,只需遍历所有已验证的属性并调用 isModified(false)
见comment from Eric Barnard here
希望有帮助
【讨论】:
谢谢。此外,这对其他人来说可能很明显,但是您必须在清除该字段后执行此操作。示例:_thisComment(''); _this.Comment.isModified(false)。轻松验证重置。 这正是showAllMessages(false)
在内部所做的,正如@yoann 所回答的那样【参考方案2】:
迟到的答案,但如果有人需要:
// assuming the ko.observable on the checkbox is called propBoolean
var propBooleanlValid = ko.validation.group(self.propBoolean, deep: false );
propBooleanlValid .showAllMessages(false);
它将隐藏消息直到下一次验证。
【讨论】:
这很好用,谢谢!这应该在 ko 验证文档中。 注意:确保您的配置中有messagesOnModified: true
。如果为假,则消息将始终显示
我觉得这是三个中最好的【参考方案3】:
通过实现这个拉取请求找到了答案。
https://github.com/Knockout-Contrib/Knockout-Validation/pull/184
提供我需要的功能。
【讨论】:
不要冒犯,但我觉得这个答案不是人们在需要此功能时应该采取的行动。我的反对意见从何而来。不过我赞成你的问题,这是一个很好的问题! :)【参考方案4】:解决此问题的一种方法是使用自定义验证器,您可以在其中检查视图模型中的标志,例如“ignoreValidation”。如果该标志为真,则让验证器通过。
验证器的外观示例:
viewmodel.userHasPremiumMembership.extend(
validation: [
validator: function ()
if (viewmodel.ignoreValidation)
return true;
return viewmodel.userHasPremiumMembership();
,
message: 'User needs to have premium membership.'
]
);
【讨论】:
【参考方案5】:如果您使用实体管理器,请确保不要在验证中包含 entityAspect,因为它连接到所有其他实体。另见 How to rollback knockout validation errors?
【讨论】:
以上是关于清除敲除验证错误的主要内容,如果未能解决你的问题,请参考以下文章