javascript - 使用 OData 模型在间隔时间内更改表的单元格

标签 javascript odata sapui5 settimeout intervals

我有这段代码,我需要我的表格显示前 10 位患者,并在 10 秒后显示接下来的 10 位患者,而无需触摸任何按钮(自动)。

我正在寻找类似的东西:https://embed.plnkr.co/ioh85m5OtPmcvPHyl3Bg/

但是使用 OData 模型(如我的 View 和 Controller 上指定的那样)。

这是我的观点:

<Table id="tablaPacientes" items="{/EspCoSet}">
  <columns>
    <!-- ... -->
  </columns>
  <ColumnListItem>
    <ObjectIdentifier title="{Bett}" />
    <!-- ... -->
  </ColumnListItem>
</Table>

这是我的 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);
    }
  });
}

我搜索了一些函数,例如 IntervalTrigger,但我真的不知道如何在这个示例中使用它。

最佳答案

以下是一些小样本:

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);
},

示例使用startIndexlength在列表绑定(bind)信息中,翻译为 $skip$top实体请求 URL 的系统查询。 IE。将这些系统查询附加到请求 URL(例如 https://<host>/<service>/<EntitySet>?$skip=3&$top=3 ),应该返回正确的实体集 like this .

列表绑定(bind)信息的其他选项可以在 UI5 文档中找到,正如我所解释的 here .

JavaScript部分

该间隔是通过 IIFE(立即调用函数表达式)结合 setTimeout 来实现的。而不是setInterval .

set<strong>Interval</strong>具有以下缺点:

  • 不会立即调用回调。您必须先等待 10 秒才能触发第一个回调。
  • 不等待数据响应到达。这可能会导致跳过批处理或将其显示的时间太短,因为无论服务器响应如何,延迟都会继续。

set<strong>Timeout</strong>相反,在何时应请求下一批批处理时提供了更好的控制。

关于javascript - 使用 OData 模型在间隔时间内更改表的单元格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69379449/

相关文章:

javascript - 如何将对象[Table]中的数据绑定(bind)到其他对象[TimePicker]中

JavaScript () 以下 }

javascript - 类型错误 : mytitle is null

jquery-ui-draggable - addEventDelegate 在拖放后未触发

search - 为 Microsoft Graph 创建一个等效于 "contains"的筛选器查询

wcf - 您可以将 WCF 数据服务(ne OData、ne Astoria、ne ADO.NET 数据服务)与 NetTcpBinding 一起使用吗?

javascript - 从 Messagebox 内的同一 Controller 访问函数名称

javascript - AngularJS - 将输入绑定(bind)到焦点

javascript - 在javascript中循环以禁用字段

entity-framework - 具有OData(Web API)的 Entity Framework 正在发送Order By子句默认情况下是Sql Query