我正在尝试使用Knockout Validation在计算的observable上手动设置错误,但验证消息未显示。我需要能够在调用apply bindings并设置组后设置错误。
var viewModel = {
computedTest: ko.computed(function(){
return 'Test'
})
};
viewModel.errors = ko.validation.group(viewModel);
ko.applyBindings(viewModel);
viewModel.computedTest.extend({ validatable: true });
viewModel.computedTest.setError('oops');
viewModel.errors.showAllMessages(true);
使用此示例,validationMessage
观察不会显示computedTest
。
我认为原因是因为验证组并不知道computedTest
现在已经扩展。但我不确定如何刷新组以显示错误消息。
以下是一个更好的例子:https://jsfiddle.net/onbyc67h/。
正如您所看到的,如果您在运行.extend({ validatable: true })
之前设置了applyBindings
,则会显示一条消息,但是如果您执行了此消息,则会显示消息。
谢谢
答案 0 :(得分:0)
发生的事情是完全合乎逻辑的:当您应用绑定时,不同的绑定属性会订阅现有的observables 的更改。因此,如果您在绑定之后创建一个新的observable,则ko无法发现并订阅它。考虑到验证扩展器所做的是创建可以订阅的新的可观察量。但是,如果你在绑定后创建它们,正如所解释的那样,它们不能被绑定器订阅。
你唯一能做的就是取消绑定和重新绑定,但这根本不可取。