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);

当我加载页面时,一切正常。当我开始修改数据时,问题就来了。用户界面永远不会改变。我已经检查过了,javascript 控制台说全局变量包含正确的数字,但 UI 仍然没有更新。我是在做一些不可能的事情,还是我做错了?

4

1 回答 1

3

你这样做是不对的。当您创建淘汰赛可观察属性时,它们只会使用您给它们的值进行初始化,即ko.observable(exactDown). 之后,knockout 就无法知道您用于初始化的变量何时发生了变化。就像你试图打电话一样ko.observable(1)

用一些全局变量初始化 knockout observable 属性并不意味着 knockout 将开始观察该变量的变化。

而不是像你这样修改全局变量:

exactDown = newValue;

...并期望淘汰赛将获得新值,您需要直接修改淘汰赛属性,如下所示:

viewModel.down(newValue);

要修改剔除属性,您需要将它们称为函数(因为它们基本上是 JavaScript 函数)。

于 2012-07-21T19:00:39.490 回答