非同期 WinRT ソースからオブジェクトを設定する IListDataAdapter (VirtualizedDataSource を使用) を実装しました。ほぼ期待どおりに動作します。データ ソースからの増分ロードを使用して ListView をセットアップしました。itemsFromIndex() メソッドは、ある種の無限ループで WinJS ライブラリによって繰り返し呼び出されるようです。
入力されたリストへの参照が含まれるようにデータ アダプターを単純化しました (非同期呼び出しが問題を引き起こしていないことを確認するため)。水平方向にスクロールすると、リスト ビューは自動的にデータを入力しようとしますが、多くの場合、内部で無限ループに陥ってしまいます。
リスト ビューをスクロールすると、項目テンプレートの読み込みが開始されます。それはそれらを拘束しません。ループしていることをどうやって知ることができますか? ブレークポイントとその console.log 以下。狂ったようにプロセッサを使い続けています。ここで何が起こっているか知っている人はいますか?
これが私のitemsFromIndexのコードです。特にない。
itemsFromIndex: function (requestIndex, countBefore, countAfter) {
var length = this._isupportincrementalloadcollection.size;
if (requestIndex >= length) {
return WinJS.Promise.wrapError(new WinJS.ErrorFromName(WinJS.UI.FetchError.doesNotExist));
}
var start = Math.max(requestIndex - countBefore, 0);
var end = Math.min(requestIndex + countAfter, length - 1);
var items = [];
for (var i = start; i <= end; i++) {
var item = this._itemFromIndex(i);
items.push(item);
}
console.log("returning");
return WinJS.Promise.wrap({
absoluteIndex: requestIndex,
atEnd: end === length - 1,
atStart: start === 0,
items: items,
offset: requestIndex - start,
totalCount: length
});
}
私の ListView は、次のオプションで設定されています。
loadingBehavior: 'incremental',
pagesToLoad: 4,
automaticallyLoadPages: true,
pagesToLoadThreshold: 1,