Knockout JS变量覆盖

3

我在脚本中有一些全局变量:

var yardsToFirst = 10;
var yardsToTD = 80;
var exactDown = 1;

在我的ViewModel中,我接收并修改变量。根据Google Chrome的javascript控制台,这些变量已经被修改了。我尝试观察它们,以便它们可以像这样更新UI:

self.down = ko.observable(exactDown);
self.toGo = ko.observable(yardsToFirst);
self.toGoal = ko.observable(yardsToTD);

当我加载页面时,一切都正常运行。问题出现在我开始修改数据时。UI从未改变。我已经检查过,JavaScript控制台显示全局变量保存了正确的数字,但UI仍然没有更新。我是做了不可能的事情还是方法不对?

1个回答

3
你做错了。当你创建Knockout可观察属性时,它们将仅使用你提供的值进行初始化,例如ko.observable(exactDown)。之后,Knockout就无法知道用于初始化的变量何时发生了更改。这就像你尝试调用ko.observable(1)一样。
用某个全局变量初始化Knockout可观察属性并不意味着Knockout会开始监视该变量的更改。
与其像你那样修改全局变量:
exactDown = newValue;

如果你希望修改一个属性的值并期望knockout能够捕捉到这个新值,你需要直接修改knockout的属性,就像这样:

viewModel.down(newValue);

为了修改Knockout属性,您需要将它们作为函数调用(因为它们基本上是JavaScript函数)。

谢谢,这给了我一个起点。我想我是做错了什么。再次感谢您的建议。 - user1371513
那实际上给了我足够的线索来解决问题,非常感谢。 - user1371513

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接