Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 敲除js变量重写_Javascript_Knockout.js - Fatal编程技术网

Javascript 敲除js变量重写

Javascript 敲除js变量重写,javascript,knockout.js,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.toG

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

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);
viewModel.down(newValue);

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

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

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

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

exactDown = newValue;
…并且希望敲除将拾取新值,您需要直接修改敲除属性,如下所示:

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

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

谢谢这给了我一个开始的地方。我觉得我做错了什么。再次感谢你给了我足够的信息,让我明白了。非常感谢