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



在调查另一个问题时,我发现了一个非常奇怪的现象,绑定到可观察对象的<span>显示"true",而单击运行函数的按钮将其记录到控制台窗口显示"false"!

Fiddle在这里:http://jsfiddle.net/fbc0w39w/1/

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

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

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

我不确定使用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}));
}; 

因此,您可能想找到一种方法来确保validatedObservable只对selectedUser中的更改做出反应,而不实例化新的更改。

这是一把"工作"小提琴:http://jsfiddle.net/st5e0r1o/

最新更新