敲除js变量覆盖

knockout js variable override

本文关键字:覆盖 变量 js 敲除      更新时间:2024-01-02

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

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

在我的ViewModel中,我接受并修改变量。根据谷歌浏览器的javascript控制台,这些变量正在被修改。我试着让他们观察,这样他们就可以像这样更新UI:

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

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

你做错了。当您创建敲除可观察属性时,它们将使用您给它们的值进行初始化,即ko.observable(exactDown)。在那之后,敲除无法知道用于初始化的变量何时更改。这就像你试图呼叫ko.observable(1)一样。

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

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

exactDown = newValue;

并且期望敲除会获得新的值,您需要直接修改敲除属性,如下所示:

viewModel.down(newValue);

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