首页 > 解决方案 > 使用 OData 模型在间隔时间内更改表格的单元格

问题描述

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

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

但是使用 OData 模型(在我的视图和控制器上指定)。

这是我的看法:

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

这是我的控制器:

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但我真的不知道如何在这个例子中使用它。

标签: javascriptodatasapui5settimeoutintervals

解决方案


  1. 您可以使用 bindItems 绑定您的项目,传递 skip、top 参数并将整个事物包装在 setInterval 中
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
)

  1. 几乎相同的事情,只需使用 oModel.read 将实体读入 viewModel.allEntities,将表绑定到 viewModel.shownEntities 并使用 setInterval 从 allEntities 获取下一个 10 以更新 shownEntities。

推荐阅读