LightSwitch HTML无限滚动错误

时间:2017-04-12 17:12:32

标签: jquery visual-studio-lightswitch lightswitch-2013

逗人,

在我的屏幕中,我有一个列布局“Root”,高度为“Stretch to Container”,里面有2行布局A和B,两者的高度也都是“Stretch to Container”。 A和B中的每一个都包含数万条记录的表格控件(网格)。这是正常的,因为LightSwitch会对结果进行分页,一次只能获取45条记录,直到您滚动到底部然后获取接下来的45条记录等...(无限滚动)

注意:两个网格都具有“适合内容”的垂直对齐方式。

然而,尝试设置布局A的isVisible = false(在设计器中,或在postRender方法中:contentItem.isVisible = false)并运行app,现在B按预期占据整个水平空间,但是包含在B中的表即使你没有滚动到底部也不知道何时步骤获取记录,它会在45条记录之后继续获取45条记录,直到应用程序停止响应并且浏览器崩溃。 如果您隐藏B并显示A,则A表会发生相同的行为。

我们尝试在LightSwitch JS文件中跟踪问题无济于事。我们无法提出令人满意的解决方法。

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

1 个答案:

答案 0 :(得分:1)

这个漏洞似乎出现在Microsoft的LightSwitch库的tryLoadMoreEntities函数中。

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

不幸的是,当表的大小设置为“适合内容”并被隐藏时,表的高度评估为零,这总是通过调用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);
        }
    }
}

此版本引入了对表元素可见性的额外检查,这可以防止您遇到的持续加载。