在表的输入字段中键入时如何知道行号

时间:2018-08-05 19:00:03

标签: sapui5

在我的XML视图中,我有一个表,在该表中的特定列上有“输入”字段,并且有一个用于该输入字段的liveChange事件的函数。代码如下:

<Table ...>
    <columns> ... </columns>
    <items>
        <ColumnListItem>
            <cells>
                ......
                <Input type ="Number" value="{...}" liveChange="qtyChanged"/>
            </cells>
        </ColumnListItem>
    </items>
</Table>

qtyChanged()中,我需要知道用户正在编辑的行号。如何实现?

2 个答案:

答案 0 :(得分:1)

您可以使用indexOfItem()中的sap.m.Table来实现它

qtyChanged: function(oEvent){
  var oRow = oEvent.getSource().getParent();//Get Row
  var oTable = oRow.getParent();// Get Table
  var iRowIndex = oTable.indexOfItem(oRow);//Get Row index
}

注意:如果响应数据多于table row limit,则会出现滚动,则行索引将无法正常工作。

答案 1 :(得分:0)

您可以获取绑定上下文,然后获取路径。您还可以像这样获得对象本身(工作示例http://jsbin.com/hutuvo/edit?html,output

<!DOCTYPE HTML>
<html>
  <head>
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta charset="UTF-8">
    <title>MVC</title>
    <script id="sap-ui-bootstrap" type="text/javascript"
      src="https://sapui5.hana.ondemand.com/resources/sap-ui-core.js"
      data-sap-ui-theme="sap_bluecrystal"
      data-sap-ui-libs="sap.m,sap.ui.table"
      data-sap-ui-xx-bindingSyntax="complex">
    </script>

    <script id="oView" type="sapui5/xmlview">
    <mvc:View
    controllerName="sap.example.Controller"
    xmlns:core="sap.ui.core"
    xmlns:mvc="sap.ui.core.mvc"
    xmlns="sap.m"
    height="100%">
      <Table id="idProductsTable" items="{ path: 'suppliers>/suppliers'}">
        <columns>
          <Column><Text text="Supplier" /></Column>
          <Column><Text text="Quantity" /></Column>
      </columns>
        <items>
          <ColumnListItem>
              <cells><Text text="{suppliers>SupplierName}" /></cells>
              <cells><Input type ="Number" value="{suppliers>Quantity}" liveChange="qtyChanged" /></cells>
          </ColumnListItem>
      </items>
      </Table>
      </mvc:View>
    </script>
    <script>
      sap.ui.define([ "sap/ui/core/mvc/Controller", "sap/ui/model/json/JSONModel"],
          function(Controller, JSONModel) {
        "use strict";

        var oPageController = Controller.extend("sap.example.Controller", {
          onInit: function() {
            var oView = this.getView();
            oView.setModel(new JSONModel({
              suppliers: [
                {
                  SupplierName: "Apple",
                  Product: "iPhone",
                  Quantity: 0
                }, {
                  SupplierName: "Samsung",
                  Product: "Galaxy",
                  Quantity: 0
                }
              ]
            }), "suppliers");
          },
          qtyChanged: function(oEvent) {
            var oContext = oEvent.getSource().getBindingContext("suppliers");
            var oPath = oContext.getPath();
            var index = parseInt(oPath.substring(oPath.lastIndexOf("/") + 1), 10);
            console.log(index);
            console.log(oContext.getObject());
          }
        });
        return oPageController;
      });

      var oView = sap.ui.xmlview({
        viewContent: jQuery('#oView').html()
      });

      oView.placeAt('content');
    </script>
  </head>

  <body class="sapUiBody" role="application">
    <div id="content"></div>
  </body>
</html>