0

KnockoutJS で使用する View Model オブジェクトを作成しました。

観測可能な配列である「年」と呼ばれるプロパティがあります...

viewModel.Years = ko.observableArray([]);

次に、配列の内容を更新したい計算されたオブザーバブルがあります...

viewModel.FuturePrediction = ko.computed(function () {
    viewModel.Years.removeAll();

    // etc...
});

私が抱えている問題は、これが無限ループを作成しているように見えることです。Knockout は、私が「Years」プロパティにアクセスしていることを検出し、それと「FuturePrediction」プロパティの間に依存関係を作成していると推測しています。

配列の内容を変更しようとするとすぐに、計算された関数が再びトリガーされます。問題は、私が行っているのは「Years」配列の読み取りではなく更新だけであるため、実際には依存関係がないことです。

これを解決するために私ができることはありますか?

4

1 に答える 1

1

KO 2.1 では、計算されたオブザーバブルはそれ自体をトリガーできないため、2.1 を使用するとより良い状態になります。

配列操作メソッドを呼び出すと、配列の読み取りと設定が行われるため、依存関係が作成されます。viewModel.Years([]);元の基になる配列に何にも依存していない限り、それを行うことができます(他の場所への参照があります)。

完全なシナリオについてはわかりませんが、「新しい」配列を作成し、Years最初にクリアするのではなく、最終的に結果を値として設定するオプションがあります。

お気に入り:

viewModel.FuturePrediction = ko.computed(function () {
    var result = [];
    //add things to result

    viewModel.Years(result);
});

繰り返しますが、正確なシナリオについてはわかりませんが、最終的な目標がいくつかの基準に基づいて新しい配列を作成することであるFuturePrediction場合、配列になり、計算されたオブザーバブルの結果として返すことができます。あなたの状況が正確にわからないだけです。

于 2012-07-15T13:05:34.987 に答える