0

我创建了一个视图模型对象以用于 KnockoutJS。

它有一个名为“Years”的属性,它是一个可观察的数组......

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

然后我有一个计算的 observable,我想在其中更新数组的内容......

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

    // etc...
});

我遇到的问题是这似乎创建了一个无限循环。我Knockout 正在检测我正在访问“Years”属性并在它和“FuturePrediction”属性之间创建依赖关系。

一旦我尝试修改数组的内容,计算函数就会再次被触发。问题是我所做的只是更新 'Years' 数组,而不是读取它 - 因此实际上没有依赖关系

有什么想法可以解决这个问题吗?

4

1 回答 1

1

在 KO 2.1 中,计算出的 observables 不能自行触发,因此使用 2.1 会更好。

调用数组操作方法会读取和设置数组,因此它会创建一个依赖项。viewModel.Years([]);只要您不依赖原始底层数组(在其他地方引用它),您就可以这样做。

我不确定您的完整方案,但一个选项是建立您的“新”数组,然后最终将结果设置为值Years而不是先清除它。

像:

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

    viewModel.Years(result);
});

同样,我不确定您的确切情况,但如果最终目标是根据某些标准创建一个新数组,那么您可能FuturePrediction是该数组并将其作为计算的 observable 的结果返回。只是不确定你的具体情况。

于 2012-07-15T13:05:34.987 回答