昨天我问了同样的问题并得到了一个答案(我试过,见下文)。我不确定它为什么会被投票。我删除了它,并没有再次尝试,试图更清楚,并说明我到目前为止所尝试的内容。
我想要在使用sap.ui.commons
和sap.ui.table
库的OpenUI5应用程序中显示大量数据。作为后端服务器,我使用CherryPy为我提供从SQLite数据库读取的数据(JSON)。后端的实现方式是调用应用程序从该偏移量开始提供offset
和它想要的行数。我已经使用另一个框架(w2ui)这样做了。
这个逻辑我需要重新实现OpenUI5。到目前为止我尝试过的:
不幸的是,当用户滚动到当前表数据的末尾时,sap.ui.table.Table
不提供触发的事件。另外,我只需要从服务器向模型中请求更多数据(目前它是sap.ui.data.json.JSONMoel
)。我不知道是否有可能自己创建这样的活动。
分页确实有事件,当页面被更改时,我可以使用它来请求更多数据。但底部的控件(箭头,页码)仅显示当前数据。因此,如果我加载一个页面可以容纳的行数,则不会显示下一页的箭头按钮。如果我加载两页的数据,它会显示页码1,2和箭头。但是第2页上的next page
箭头已禁用,因为第3页没有数据。每次添加数据时,它也会添加新的页码。只要并非所有数据都被提取,人们就不会知道实际有多少页面。
我读到的第三个选项in this StackOverflow question。在这里,我不太确定这是否是我想要的。虽然问题海报与我有同样的问题。使用ODataModel
,如果我理解正确,它仍会加载来自后端的所有数据,但只会呈现对用户可见的数据。我不太确定如何根据需要使用它。我不知道它会如何自动告诉我偏移量和行数。它与表模型绑定。
所以我的问题是哪些模块允许我按照描述实现服务器通信。
修改
至于选项3,根据评论我做错了。创建表后
var oTable = new sap.ui.table.Table("table", {
visibleRowCountMode: sap.ui.table.VisibleRowCountMode.Auto,
threshold: 50,
toolbar: oTableToolbar
});
我按如下方式绑定表数据模型
var oModel = new sap.ui.model.odata.ODataModel("get_table_data_oui5", true);
sap.ui.getCore().setModel(oModel, "TableModel");
oTable.setModel(oModel);
oTable.bindRows("TableModel>/");
调用CherryPy公开的函数get_table_data_oui5
,它接收的唯一参数是字符串$metadata
(除非我添加自己的参数)。它不会收到$top
和$skip
,也不会收到任何值。
编辑2
这些是我在Firefox和Chromium中可以看到的函数调用。除了字符串$metadata
之外什么都没有被转移。我确定我在这里做错了但我不知道帽子。如果我已正确阅读,我所要做的就是将模型绑定到表格。