在applyBindings之后的计算observable上的Knockout验证setError

时间:2015-11-19 08:42:55

标签: validation knockout.js knockout-validation

我正在尝试使用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,则会显示一条消息,但是如果您执行了此消息,则会显示消息。

谢谢

1 个答案:

答案 0 :(得分:0)

发生的事情是完全合乎逻辑的:当您应用绑定时,不同的绑定属性会订阅现有的observables 的更改。因此,如果您在绑定之后创建一个新的observable,则ko无法发现并订阅它。考虑到验证扩展器所做的是创建可以订阅的新的可观察量。但是,如果你在绑定后创建它们,正如所解释的那样,它们不能被绑定器订阅。

你唯一能做的就是取消绑定和重新绑定,但这根本不可取。