javascript - Controller 表中的 sapui5 JS 未绑定(bind)

标签 javascript html sapui5

我正在尝试使用 Odata 服务创建搜索帮助,但我的表在 Controller 中显示为未定义,这是我的代码请帮助

index.html

<head>
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta charset="UTF-8">

    <title>search_help</title>
    <script id="sap-ui-bootstrap"
        src="../../resources/sap-ui-core.js"
        data-sap-ui-libs="sap.m,sap.ui.commons,sap.ui.table,sap.ui.ux3"
        data-sap-ui-theme="sap_belize"
        data-sap-ui-compatVersion="edge"
        data-sap-ui-resourceroots='{"search_help": ""}'>
    </script>


    <link rel="stylesheet" type="text/css" href="css/style.css">

    <script>
        sap.ui.getCore().attachInit(function() {
            new sap.m.Shell({
                app: new sap.ui.core.ComponentContainer({
                    height : "100%",
                    name : "search_help"
                })
            }).placeAt("content");
        });
    </script>

</head>
<body class="sapUiBody" id="content">
</body>

view1.view.js

sap.ui.jsview("search_help.view.View1", {
    getControllerName: function() {
    return "search_help.controller.View1";
},

createContent : function(oController) {
  var oPanel = new sap.ui.commons.Panel({
          text : "Select Order ID"
  });
  var oLayoutMatrix = new sap.ui.commons.layout.MatrixLayout({
                      width : "60%",                         
                      widths : [ "30%", "40%", "30%" ]  
  });
  var oOrderLabel = new sap.ui.commons.Label("idOrderLabel",
          {text: "Order ID"});
  // Input Field for Material Number with Value Help
  var oOrderInput = new sap.ui.commons.ValueHelpField("idOrderInput", {
        valueHelpRequest: function(oEvent){
            var oValueHelpDialog = new sap.ui.ux3.ToolPopup({
                    modal: true,
                    inverted: false,                          
                    title: "Select Order Number",
                    opener:  "idOrderInput",            
                    closed: function (oEvent){
                }
      });
      var oOkButton = new sap.ui.commons.Button({
                    text: "OK",
                    press: function (oEvent) {
                               oEvent.getSource().getParent().close();
                    }
        });
  var oHelpTable = new sap.ui.table.Table("pTab1",{
    selectionMode: sap.ui.table.SelectionMode.Single,
    visibleRowCount: 7,
    width: "300pt"
  });
   oHelpTable.addColumn(
    new sap.ui.table.Column({
            label: new sap.ui.commons.Label({text: "Maintenance Plane"}),
            template: new sap.ui.commons.TextField().bindProperty("value",    "Planplant"),
            sortProperty: "Planplant",
            filterProperty: "Planplant"
    })
  );
      oHelpTable.addColumn(
    new sap.ui.table.Column({
            label: new sap.ui.commons.Label({text: "Order Number"}),
            template: new sap.ui.commons.TextField().bindProperty("value", "Orderid"),
            sortProperty: "Orderid",
            filterProperty: "Orderid"
    })
  );
  oHelpTable.addColumn(
    new sap.ui.table.Column({
            label: new sap.ui.commons.Label({text: "OrderType"}),
            template: new sap.ui.commons.TextField().bindProperty("value", "OrderType"),
            sortProperty: "OrderType",
            filterProperty: "OrderType"
    })
  );


          oValueHelpDialog.addContent(oHelpTable);
          oValueHelpDialog.addButton(oOkButton);
          oValueHelpDialog.open();

        }          
      });

  oLayoutMatrix.createRow(oOrderLabel, oOrderInput);
  oPanel.addContent(oLayoutMatrix);
  return oPanel;
  }
});

view1.controller.js 这里 otable 显示为未定义

sap.ui.define([
"sap/ui/core/mvc/Controller"], function(Controller) {
"use strict";

return Controller.extend("search_help.controller.View1", {
    onInit: function() 

    {
        var oModel = new sap.ui.model.odata.ODataModel("/Gateway_Order/sap/opu/odata/SAP/ZP01_FIORI_SRV_01/");
        var oTable = this.byId("pTab1");
        oTable.setModel(oModel);
        oTable.bindRows("/OrderDataSet");
    }

});
});

最佳答案

您的问题是如何获取表的 ID。

您的问题的解决方案是:

var oTable = sap.ui.getCore().byId("pTab1");

但是,让我们了解Id的创建和获取。

  1. 在 JS View 中,有两种创建 ID 的方法。

    方式一::直接提供Id。例如:

    var oText = new sap.m.Text('idText'{ text:'嘿!'});

现在,这个 id -'idText' 与您的整个应用程序相关联。因此,如果您有另一个 View ,其中包含具有相同 ID 的控件,您将在控制台中看到重复 ID 错误。

要获取使用 Way1 创建的 ID 的控件,请使用以下方法:

var oControl = sap.ui.getCore().byId('idText'); // since this is unique everywhere in your application.

现在,假设有 2 名或更多开发人员正在开发一个应用程序,他们正在为该应用程序创建不同的 View 。他们可能(很有可能)创建具有相同 ID 的控件。由于重复的 id 错误,当我们集成两个 View 时,应用程序将崩溃。如何解决?

方式二:我们可以使用controller的createId()方法来创建一个以view的id为前缀的Id。因此,这样即使两个开发人员使用相同的 ID,由于不同的 View ID,他们最终也会得到不同的控件 ID。 因此,假设我们有两个 View ,View1 (id:view1) 和 view2 (id:view2)。

如果我在两个控件中创建一个具有相同 ID 的控件(使用 Controller 的 createId() 方法),将生成两个唯一的 ID,并且永远不会出现重复 ID 错误。

因此, View 1( id: view1):

var oText = new sap.m.Text(oController.createId('idText'),{ text:'Hey!'});

View 1 中 oText 的 ID : view1--idText

同样,

View 2(id:view2):

var oText = new sap.m.Text(oController.createId('idText'),{ text:'Hey!'});

View 2 中 oText 的 ID:view2--idText

干得漂亮。但是,如果 View ID 是自动生成的,而我可能不知道我的 View ID 是什么怎么办?好问题。

解决方案是方法:this.byId()。在控件的 id 以 View 的 id 为前缀的情况下,始终使用 this.byId() 方法。它将为您附加 View 的 ID,然后搜索并返回该 View 独有的控件。

因此,要获取 View1 的 oText,您将使用(在 View1 的 Controller 中);

var oText = this.byId('idText')// will fetch view1--idText

再次获取 View2 的 oText,您将使用(在 View2 的 Controller 中);

var oText = this.byId('idText')// will fetch view2--idText
  1. 在 XML View 中,控件的 Id 总是由框架自动以 View 的 id 为前缀。这个类似于我们JS的方式2。 (JS 的方式 1 在 XML View 中是不可能的)。

查看代码:

<Text id='idText' text='hey! /> <!-- Id generated is: 'viewid--idText' -->

因此,当您使用 XML View 时,ID 的获取总是通过以下方式完成:

var oControl = this.byId('idText');

关于javascript - Controller 表中的 sapui5 JS 未绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41437236/

相关文章:

javascript - 使用 AngularJS ng-repeat 时如何初始化本地范围内的属性

javascript - 创建 POST header

html - 小屏幕显示自己div之外的内容

javascript - jquery 动态改变 Bootstrap 标签文本

dom - 用户界面5 : Check if a control is currently rendered and visible

javascript - 将信息从源站点传递到 JavaScript 应用程序链接的安全方法?

javascript - Cypress.io - 根据 cy.route() 中的请求参数以编程方式设置响应

javascript - Chrome 扩展程序不与用户交互

html - 无法让 github 在文件夹中查看我的索引页面

sapui5 - 如何实现跨应用导航并导航回Fiori launchpad主页?