我正在尝试设置验证组,以便在按下按钮后显示错误。
我的问题每次验证错误发生更改时,我都无法让验证组正确更新。
在我的示例中,每次离开文本框(预期)时,我都可以正确地看到字段observable更新的.errors属性。对于验证组,文档指向调用.showAllMessages()或评估组本身。
我在下面创建了一个示例。我看到的行为摘要:
在示例中,我在单个字段上设置了这些验证:
观点:
<label>Test number</label>
<input type="text" data-bind="value: myNumber"/>
<div>myNumber error: <span data-bind="text: myNumber.errors"/></div>
<div>Validation group:
<ul data-bind="foreach: validationGroup"><li data-bind="text: $data"></li></ul>
</div>
<button type="submit" class="btn" data-bind="click: testValidate">Update validation group</button>
视图模型:
var viewModel = {
myNumber: ko.observable().extend({
maxLength: 10,
number: {
message: "Please ensure that myNumber contains only numeric characters"
},
required: {
message: "myNumber is required"
},
minLength: 3
})
};
viewModel.validationGroup = ko.validation.group([viewModel.myNumber]);
viewModel.testValidate = function () {
// Try both, to be sure...
viewModel.validationGroup.showAllMessages();
viewModel.validationGroup();
};
答案 0 :(得分:0)
我已经通过ko验证击中并错过了。它似乎在简单模型的简单页面上工作得最好。我发现我需要添加如下验证选项:
var validationOptions = {
decorateElement: true,
registerExtenders: true,
messagesOnModified: true,
insertMessages: false,
parseInputAttributes: true,
messageTemplate: null,
grouping: {
deep: true
},
};
然后当我应用绑定时,我使用
ko.applyBindingsWithValidation(self, $id, validationOptions);
如果有效,请告诉我。
答案 1 :(得分:0)
好吧,看起来这是旧版Knockout(v1.0.1)中的一个错误。
最新发布的版本是v1.0.2(从2012年9月开始),下面的工作示例来自GitHub最新版本:( 2013年10月修改)
这是上面相同代码的JS小提琴,按预期工作: http://jsfiddle.net/overflew/JhWZq/1/
所以.showAllMessages()就是更新组所需的全部内容:
viewModel.testValidate = function () {
viewModel.validationGroup.showAllMessages();
};
使用旧版本结束的原因:KO Validation via NuGet(Microsoft .NET的软件包管理工具)最后更新于2013年6月w / v1.0.1,现在已落后1或2个版本。