我已经实现了从异步 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,