逗人,
在我的屏幕中,我有一个列布局“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来一次显示一个。
答案 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);
}
}
}
此版本引入了对表元素可见性的额外检查,这可以防止您遇到的持续加载。