我创建了一个View Model对象,用于KnockoutJS。
它有一个名为'Years'的属性,它是一个可观察的数组......
viewModel.Years = ko.observableArray([]);
然后我有一个计算的observable,我想在其中更新数组的内容......
viewModel.FuturePrediction = ko.computed(function () {
viewModel.Years.removeAll();
// etc...
});
我遇到的问题是,这似乎会产生无限循环。我猜测 Knockout正在检测我正在访问'Years'属性并在它和'FuturePrediction'属性之间创建依赖关系。
一旦我尝试修改数组的内容,就会再次触发计算的函数。问题是,我所做的只是更新'Years'数组,而不是读取它 - 因此实际上不是依赖。
我可以做些什么来解决这个问题?
答案 0 :(得分:1)
在KO 2.1中,计算出的观察者不能自己触发,所以2.1版本会更好。
调用数组操作方法会读取并设置数组,因此会创建依赖项。你可以做viewModel.Years([]);
,只要你不依赖原始的底层数组(在其他地方引用它)。
我不确定你的完整情况,但是一个选项是建立你的“新”数组,然后最终将结果设置为Years
的值而不是先清除它。
像:
viewModel.FuturePrediction = ko.computed(function () {
var result = [];
//add things to result
viewModel.Years(result);
});
同样,我不确定您的具体情况,但如果最终目标是根据某些条件创建新数组,那么您可以将FuturePrediction
作为数组并将其作为结果返回计算可观察。只是不确定你的情况。