LightSwitch HTML 无限滚动错误

LightSwitch HTML infinite scrolling bug

亲爱的,

在我的屏幕上,我有一个高度为 "Stretch to Container" 的列布局 "Root",其中有 2 行布局 A 和 B,它们的高度也都是 "Stretch to Container" . A和B各包含一个table控件(网格),有几万条记录。这是可以的,因为 LightSwitch 对结果进行分页,一次只获取 45 条记录,直到您滚动到底部,然后它获取接下来的 45 条记录等...(无限滚动)

注意:两个网格的垂直对齐方式为 "Fit to Content"。

但是尝试设置布局A的isVisible = false(在设计器中,或者在postRender方法中:contentItem.isVisible = false)和运行应用程序,现在B占据了整个水平space 符合预期,但是 B 中包含的 table 不知道什么时候开始获取记录,即使您没有滚动到底部,它也会在 45 条记录后继续获取 45 条记录,直到应用程序停止响应并且浏览器崩溃。 如果隐藏 B 并显示 A,则 A 的 table 会发生相同的行为。

我们尝试追踪 LightSwitch JS 文件中的问题,但无济于事。而且我们无法想出令人满意的解决方法。

有没有人遇到过这种奇怪的行为并找到了解决办法?我们需要通过在其他布局上设置 isVisible=false 来实现这种类似选项卡的多种布局功能并一次显示一个。

此缺陷似乎存在于 Microsoft LightSwitch 库的 tryLoadMoreEntities 函数中。

此函数通过比较 table 的高度与视图区域 (scrollHelper.viewHeight) 的高度来决定是否应将更多项目添加到 table (needMoreItems)。

不幸的是,当 table 的大小设置为 "Fit to Content" 并被隐藏时,table 的高度计算为零,这总是导致通过调用loadMoreEntities 方法。

话虽如此,您应该可以通过如下修改此函数来纠正此缺陷:

function tryLoadMoreEntities(table) {
    var collection = table._collection;
    if (!collection) {
        return;
    }
    if (collection.state === _VisualCollectionState.idle) {
        var scrollHelper = table._scrollHelper,
            needMoreItems =
                table.data._isActivated &&
                table._tableElement.is(":visible") &&
                table._tableElement.height() - scrollHelper.viewTop <
                    2 * scrollHelper.viewHeight;
        if (needMoreItems) {
            loadMoreEntities(table);
        } else {
            endLoading(table);
        }
    }
}

此修订引入了对 table 元素可见性的额外检查,这应该可以防止您遇到的持续加载。