我有一个问题,我有一个底层的 observable 数组,它通过计算的 observable 进行排序和公开。removeAll
虽然我现在有一个问题,如果我限制计算的 observable,在调用底层数组时似乎会导致问题。
这个场景非常复杂,但基本上我在缓冲区部分有一组大约 0-200 行,这是可观察的数组,然后我根据用户选择的选项卡显示该数组的部分。因此,在 100 条记录中,我只能在计算的 observable 中将其过滤到 30 条。但有些地方我需要使数组无效并下载一个新列表,该列表可能会单独或分批下降,因此会受到限制以减少不必要的重新评估。但是,当我尝试使底层数组无效时,removeAll
它似乎通知视图内容已更改并尝试重新评估视图级别绑定,但是其中一些查看现在为空的底层数组,但作为计算有没追上就倒了。
那么有没有办法在数组上的 removeAll 之后强制计算计算?
这是我的意思的一个例子:
var currentFilterType = ko.observable(1); // this is changed in the UI by the user
var underlyingArray = ko.observableArray();
var filteredDetails = ko.computedObservable(filterPredicate);
function filterPredicate() {
// assume ko.linq is included, this is a simple version of whats happening
return underlyingArray.Where(function(x){ return x.FilterType() == currentFilterType; })
.OrderBy(function(x){ return x.DateCreated(); })
.ToObservableArray();
}
function invalidateData() {
underlyingArray.removeAll();
// fetch some more data to repopulate array
}
function doSomethingWithItem(data) {
// check something against the original array
}
// In the view usage would look like this
<!-- ko foreach: filteredDetails -->
<a data-bind="click: doSomethingWithItem"></a>
<!-- /ko -->