(JsFiddle)Knockout observable在屏幕上显示不同的值到console.log

问题描述:

在调查另一个问题期间,我发现了一个非常奇怪的现象,其中绑定到observable的<span>显示“true”,而单击运行按钮将其记录到控制台窗口的功能显示“false”!(JsFiddle)Knockout observable在屏幕上显示不同的值到console.log

小提琴是在这里:在镀铬http://jsfiddle.net/fbc0w39w/1/

点击绿色按钮,使用F12显示控制台窗口中,点击“记录它”看“真”在控制台中。您还会在提交按钮下方看到“true”。然后清除用户登录中的文本,在其他地方单击(模糊上的值更新)并在登录框中查看错误消息。提交按钮下方的值保持为true。再次点击“登录”按钮,瞧!它记录下它应该做的“假”。

据我所知,这两个值都来自vo.isValid变量...?

+0

对不起,有错了链接那里! – TheMook

这可能是问题所在:在您的getData函数中,您将用新的函数代替整个validatedObservable。两个底部的UI元素绑定到旧的isValid可观察。

我不知道使用validationObservable的“正确”的方法是什么(从未使用过它),但是你可以看到,这是一个问题在可观察到的嵌套它:

self.vo = ko.observable(ko.validatedObservable()); 

self.getData = function() { 
    self.selectedUser(ko.mapping.fromJS(data, validationMapping)); 
    self.vo(ko.validatedObservable(self.selectedUser(), {deep: true, live: true, observable: true})); 
}; 

所以你'd可能想要找到一种方法来确保validatedObservable只是对selectedUser中的更改做出反应而不实例化新的。

这里是一个“工作”小提琴:http://jsfiddle.net/st5e0r1o/

+0

奇怪的是,我也一直在看。我尝试直接替换现有的observable(如您所示),但现在屏幕和console.log都不显示错误...我想这是一种排序的进展! – TheMook

+0

啊,刚刚看到你已经通过放入可观测数据来治愈它。起初没有意识到。我对使用验证没有经验,所以对我来说都是新手。 – TheMook