[英]Change the cells of a table in an interval time using OData model
I have this code and I need my table to show the first 10 patients and, after 10 seconds, show the next 10 without touching any button (automatically).我有这个代码,我需要我的表格显示前 10 名患者,并在 10 秒后显示接下来的 10 名患者,而无需触摸任何按钮(自动)。
I'm looking for something similar to this: https://embed.plnkr.co/ioh85m5OtPmcvPHyl3Bg/我正在寻找类似的东西: https ://embed.plnkr.co/ioh85m5OtPmcvPHyl3Bg/
But with an OData model (as specified on my view and controller).但是使用 OData 模型(在我的视图和控制器上指定)。
This is my view:这是我的看法:
<Table id="tablaPacientes" items="{/EspCoSet}">
<columns>
<!-- ... -->
</columns>
<ColumnListItem>
<ObjectIdentifier title="{Bett}" />
<!-- ... -->
</ColumnListItem>
</Table>
This is my controller:这是我的控制器:
onInit: function () {
var oModel = this.getOwnerComponent().getModel("zctv");
this.getView().setModel(oModel);
},
onBeforeRendering: function () { // method to get the local IP because I need it for the OData
var ipAddress;
var RTCPeerConnection = window.webkitRTCPeerConnection || window.mozRTCPeerConnection;
var self = this;
function grepSDP (sdp) {
var ip = /(192\.168\.(0|\d{0,3})\.(0|\d{0,3}))/i;
sdp.split('\r\n').forEach(function (line) {
if (line.match(ip)) {
ipAddress = line.match(ip)[0];
self.setIp(ipAddress);
}
});
}
if (RTCPeerConnection) {
(function () {
var rtc = new RTCPeerConnection({
iceServers: []
});
rtc.createDataChannel('', {
reliable: false
});
rtc.onicecandidate = function (evt) {
if (evt.candidate) {
grepSDP(evt.candidate.candidate);
}
};
rtc.createOffer(function (offerDesc) {
rtc.setLocalDescription(offerDesc);
}, function (e) {
console.log("Failed to get Ip address");
});
})();
}
},
setIp: function (ip) {
this.getView().byId("planta").bindElement({
path: "/CenTVSet('" + ip + "')"
});
var oModel = this.getView().getModel();
var that = this;
oModel.read("/CenTVSet('" + ip + "')", {
success: function (oData, oRes) {
var einri = oData.Einri;
var orgpf = oData.Orgpf;
var oTable = that.getView().byId("tablaPacientes");
var oBinding = oTable.getBinding("items");
var aFilters = [];
var filterO = new Filter("Orgna", sap.ui.model.FilterOperator.EQ, orgpf);
aFilters.push(filterO);
var filterE = new Filter("Einri", sap.ui.model.FilterOperator.EQ, einri);
aFilters.push(filterE);
oBinding.filter(aFilters);
}
});
}
I searched some functions like IntervalTrigger
but I really don't know how can I use it for this example.我搜索了一些像
IntervalTrigger
这样的函数,但我真的不知道如何在这个例子中使用它。
var iSkip = 0;
var iTop = 10;
setInterval(function() {
table.bindItems("/EspCoSet", {
urlParameters: {
"$skip": iSkip.toString() // Get first 10 entries
"$top": iTop.toString()
},
success: fuction (oData) {
iSkip = iTop; // Update iSkip and iTop to get the next set
iTop+= 10;
}
...
}, 10000); // Each 10 seconds
)
Here are some small samples:以下是一些小样本:
startList: function(listBase, $skip, $top, restInfo) { let startIndex = $skip; let length = $top; let totalSize; (function repeat(that) { const bindingInfo = Object.assign({ startIndex, length }, restInfo); listBase.bindItems(bindingInfo); listBase.data("repeater", event => { totalSize = event.getParameter("total"); // $count value startIndex += $top; startIndex = startIndex < totalSize ? startIndex : 0; setTimeout(() => repeat(that), 2000); }).attachEventOnce("updateFinished", listBase.data("repeater"), that); })(this); }, stopList: function(listBase) { listBase.detachEvent("updateFinished", listBase.data("repeater"), this); },
The samples make use of startIndex
and length
in the list binding info which translates to $skip
and $top
system queries of the entity request URL.示例在列表绑定信息中使用
startIndex
和length
,这些信息转换为实体请求 URL 的$skip
和$top
系统查询。 Ie appending those system queries to the request URL (eg https://<host>/<service>/<EntitySet>?$skip=3&$top=3
), should return the correct set of entities like this .即将这些系统查询附加到请求 URL(例如
https://<host>/<service>/<EntitySet>?$skip=3&$top=3
)应该返回正确的实体集, 如 this 。
Additional options for the list binding info can be found in the UI5 documentation as I explained here .列表绑定信息的其他选项可以在 UI5 文档中找到,正如我在此处解释的那样。
The interval is implemented with an IIFE (Immediately Invoked Function Expression) in combination with setTimeout
instead of setInterval
.间隔是使用 IIFE(立即调用函数表达式)结合
setTimeout
而不是setInterval
来实现的。
set Interval
has the following disadvantages: set Interval
有以下缺点:
set Timeout
instead offers a better control when the next batch should be requested. set Timeout
反而提供了更好的控制何时应该请求下一批。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.