knockout js变量覆盖

时间:2012-07-21 18:54:07

标签: javascript knockout.js

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

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 个答案:

答案 0 :(得分:3)

你做错了。当您创建knockout observable属性时,它们将使用您为其提供的值进行初始化,即ko.observable(exactDown)。在此之后,淘汰赛无法知道您用于初始化的变量何时发生变化。这就像你试图打电话给ko.observable(1)

使用某个全局变量初始化knockout observable属性并不意味着knockout将开始监视变量的变量。

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

exactDown = newValue;

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

viewModel.down(newValue);

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