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 は更新されません。私は不可能なことをしていますか、それとも間違った方法で行っていますか?

4

1 に答える 1

3

それは間違っている。ノックアウトの監視可能なプロパティを作成すると、指定した値で初期化されますko.observable(exactDown)。その後、初期化に使用した変数がいつ変更されたかをノックアウトが知る方法はありません。に電話をかけようとしたのと同じですko.observable(1)

グローバル変数でノックアウトの監視可能なプロパティを初期化しても、ノックアウトがその変数の変更を監視し始めるわけではありません。

あなたのようにグローバル変数を変更する代わりに:

exactDown = newValue;

...ノックアウトが新しい値を取得することを期待して、次のようにノックアウト プロパティを直接変更する必要があります。

viewModel.down(newValue);

ノックアウト プロパティを変更するには、それらを関数として呼び出す必要があります (これらは基本的に JavaScript 関数であるため)。

于 2012-07-21T19:00:39.490 に答える