gpt4 book ai didi

validation - Knockout.Validation 未显示初始渲染后加载的属性的错误消息

转载 作者:行者123 更新时间:2023-12-03 19:52:03 27 4
gpt4 key购买 nike

我有一个 Knockout.Validation 场景,我认为该场景相当普遍,但尚未通过在网络上搜索和本网站上的各种答案找到解决方案。

我正在验证的属性在 ajax 调用之后才会添加到可观察到的 knockout 中。当验证被触发时,验证失败并且是我的验证组中的一个错误,但错误消息没有显示在页面上。我已经通过向初始渲染发生时确实存在的属性添加验证来确保所有验证都已连接,并且消息为此显示。

我知道我可以为该属性设置默认值,但我不希望您必须这样做。当我使用validationMessage数据绑定(bind)属性手动添加验证消息时,它会引发一个js错误,因为当 knockout 第一次通过时该属性不存在.....未捕获的TypeError:无法处理绑定(bind)“validationMessage:函数(){返回 BlogPost().Title }"
消息:无法读取未定义的属性“扩展”。

请参阅此 plunk 示例... http://plnkr.co/edit/OhUw8wP2uNypulbcOIbz?p=preview .

    self.Errors = ko.validation.group(this, { deep: true });
self.Count(self.Errors().length);
if (self.Errors().length === 0) {
alert("no errors");
}
else {
self.Errors.showAllMessages();
}

它正在使用 require js,但这不会导致任何问题,因为验证消息显示的标准场景。

我在这里缺少什么来使它正常工作?

最佳答案

这很干净......将您的可观察对象移动到主视图模型,并将 updateBlogPost 保留为只是一个方法(没有属性......应该是)。

这允许您在加载博客文章后调用 self.Errors.showAllMessages()。不确定在此更改后是否需要更新方法?

function EditBlogPostViewModel(params) {

var self = this;
self.BlogPost = ko.observable({});
self.ErrorsCount = ko.observable(0);

self.Test = ko.observable("").extend({ required: true });
self.Count = ko.observable(0);
self.Errors = ko.validation.group(this, { deep: true });
self.Count(self.Errors().length);

blogApiService.getCategories().then(function (categories) {
return blogApiService.getBlogPost(params.id).then(function (post) {
self.BlogPost(new BlogPost(post, categories));
self.Errors.showAllMessages();
});
});

}

EditBlogPostViewModel.prototype.updateBlogPost = function () {
var self = this;
if (self.Errors().length === 0) {
alert("no errors");
}
else {
self.Errors.showAllMessages();
}
};

关于validation - Knockout.Validation 未显示初始渲染后加载的属性的错误消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29697886/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com