如何强制 SmartTable 加载所有项目?
How do I force the SmartTable to load all items?
我的 SAP UI5 视图包含一个 SmartTable,它以只读模式绑定到 ODataModel 中的实体集。
table 将它显示的项目数限制为 100,可通过它附加到服务器的数据查询的 ?$top=0&$limit=100
参数来验证。
但是,我的用户希望 table 加载并显示 所有 项,而无需分页或按下某些“更多”按钮。
有没有办法覆盖 SmartTable 的默认行为?例如通过将一些 growingSize
属性 设置为“Infinity”?或者通过修改聚合绑定?还是在OData服务中添加注解?
由于您没有指定预期项目的数量或您在此处使用的 table 以下是一些一般注意事项和一些可能的解决方案。
类型table
在您可以使用的不同类型的 table 之间有一些事情需要考虑,design guidelines:
中有 SAP 本身的一些建议
Do not use the responsive table if: You expect the table to contain more than around 1,000 rows. Try using the analytical table or grid table instead; they are easier to handle, perform better, and are optimised for handling large numbers of items.
解决方法
第一个选项 我能想到,如果您使用的是响应式 table 并且您希望少于 1000 行,那么 scroll to load feature 可能是感兴趣的是,当用户到达当前列表的底部时应该加载更多条目。
有一些方法可以增加默认大小 100,既可以通过 table 使用 growingThreshold
property, or through the declaration of the oData model using the sizeLimit
如果您使用的是网格 table,则 scroll-to-load 的工作方式略有不同,因为它不会同时显示所有行。相反,它会破坏当前行以显示新行,这就是为什么它被推荐用于(非常)大的数据集。
第二,如果这些解决方案中有 none 对您的用户有效,您也可以先获取当前列表的计数,包括过滤器,这样您就可以设置准确的在显示结果之前 table 上的阈值。如果操作正确,您的 oData 服务应该 return 在查询时使用 /myserivce/MyEntity/$count?$filters...
计数。 CDS 会自动执行此操作,较早的服务将需要单独实施。
Last,如果您知道列表永远不会超过一定的行数,您可以将 table 上的 growingThreshold
参数设置为该数字然后您就不必担心首先获取准确的计数。
所有这些的实现方式在一定程度上取决于您如何创建智能 table(元素、手动等),所以我不确定如何提供可用的示例代码
您可以使用 formatter
函数实现此目的,该函数将 return 您的模型中有多少条目。
<SmartTable growingThreshold = "{path:'yourModel>/', formatter:'.formatter.sizeCalculator'}">
在formatter
文件中,通常在模型文件夹中找到:
sizeCalcualtor: function(oModel){
let count = 0;
for(let i in oModel){
//add item to count;
}
return count;
}
我的 SAP UI5 视图包含一个 SmartTable,它以只读模式绑定到 ODataModel 中的实体集。
table 将它显示的项目数限制为 100,可通过它附加到服务器的数据查询的 ?$top=0&$limit=100
参数来验证。
但是,我的用户希望 table 加载并显示 所有 项,而无需分页或按下某些“更多”按钮。
有没有办法覆盖 SmartTable 的默认行为?例如通过将一些 growingSize
属性 设置为“Infinity”?或者通过修改聚合绑定?还是在OData服务中添加注解?
由于您没有指定预期项目的数量或您在此处使用的 table 以下是一些一般注意事项和一些可能的解决方案。
类型table
在您可以使用的不同类型的 table 之间有一些事情需要考虑,design guidelines:
中有 SAP 本身的一些建议Do not use the responsive table if: You expect the table to contain more than around 1,000 rows. Try using the analytical table or grid table instead; they are easier to handle, perform better, and are optimised for handling large numbers of items.
解决方法
第一个选项 我能想到,如果您使用的是响应式 table 并且您希望少于 1000 行,那么 scroll to load feature 可能是感兴趣的是,当用户到达当前列表的底部时应该加载更多条目。
有一些方法可以增加默认大小 100,既可以通过 table 使用 growingThreshold
property, or through the declaration of the oData model using the sizeLimit
如果您使用的是网格 table,则 scroll-to-load 的工作方式略有不同,因为它不会同时显示所有行。相反,它会破坏当前行以显示新行,这就是为什么它被推荐用于(非常)大的数据集。
第二,如果这些解决方案中有 none 对您的用户有效,您也可以先获取当前列表的计数,包括过滤器,这样您就可以设置准确的在显示结果之前 table 上的阈值。如果操作正确,您的 oData 服务应该 return 在查询时使用 /myserivce/MyEntity/$count?$filters...
计数。 CDS 会自动执行此操作,较早的服务将需要单独实施。
Last,如果您知道列表永远不会超过一定的行数,您可以将 table 上的 growingThreshold
参数设置为该数字然后您就不必担心首先获取准确的计数。
所有这些的实现方式在一定程度上取决于您如何创建智能 table(元素、手动等),所以我不确定如何提供可用的示例代码
您可以使用 formatter
函数实现此目的,该函数将 return 您的模型中有多少条目。
<SmartTable growingThreshold = "{path:'yourModel>/', formatter:'.formatter.sizeCalculator'}">
在formatter
文件中,通常在模型文件夹中找到:
sizeCalcualtor: function(oModel){
let count = 0;
for(let i in oModel){
//add item to count;
}
return count;
}