計算されたオブザーバブルを介してソートおよび公開される、基礎となるオブザーバブル配列があるという問題があります。現在、計算されたオブザーバブルを調整するとremoveAll
、基になる配列を呼び出すときに問題が発生するように見えるという問題があります。
シナリオは非常に複雑ですが、基本的には、監視可能な配列であるバッファー セクションに約 0 ~ 200 行のセットがあり、ユーザーが選択したタブに応じてその配列のセクションを表示します。したがって、100 レコードのうち、計算されたオブザーバブルで 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 -->