sapui5 JS不具约束力

问题描述:

我试着使用OData服务创建搜索的帮助,但我的表显示控制器不确定的,这里是我的代码plz帮助sapui5 JS不具约束力

的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"); 
    } 

}); 
}); 
+1

这可能会有所帮助:http://*.com/questions/27021011 – ppovoski

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

解决问题的方法是:

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

然而,让我们明白的ID创建和获取。

  1. 在JS浏览,有两种方法来创建标识。

    方法1::提供直接标识。例如:

    VAR oText =新sap.m.Text( 'idText'{文字: '嘿!'});

现在,这个id -'idText'与您的整个应用程序相关联。所以,如果你有另一个视图,它有一个相同的ID控制,你会在控制台中看到重复的ID错误。

要使用IDS与WAY1创建获取控件,使用下面的方法:

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

现在,让我们想到2名或更多的开发人员在应用程序中工作,他们正在为应用程序创建不同的看法。他们可能(有很高的可能性),用相同的ID创建控件。由于重复的id错误,我们在整合两个视图时应用程序会崩溃。如何解决这个问题?

路2:我们可以使用的方法createId控制器()创建一个ID为与视图的ID前缀。因此,即使两个开发人员使用相同的ID,这种方式也会由于不同的视图ID而以不同的ID进行控制。因此,让我们认为我们有两个视图View1(id:view1)和view2(id:view2)。

如果我创建(使用createId控制器()方法),同时在控制与相同ID的控制,将产生两个独特的ID和重复ID错误永远不会加薪。

所以,视图1(ID:厂景):

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

在图1 oText的编号:厂景 - idText

同样,

视图2(ID:视图2):

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

鉴于2 oText的编号:视图2 - idText

很好完成。但是,如果视图ID是自动生成的,我可能不知道我的视图ID是什么?好问题。

解决方案是方法:this.byId()。在这种情况下,如果控件的id以视图的ID为前缀,则始终使用方法this.byId()。它会为您添加视图的ID,然后搜索并返回该视图唯一的控件。因此,要获取View1的oText,您将使用(在View1的控制器中);

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

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

var oText = this.byId('idText')// will fetch view2--idText 
  1. IN XML视图,控件标识总是与视图的由框架ID自动前缀。这与我们的JS 2路相似。 (JS的方法1在XML视图中永远不可能)。
  2. 查看代码:

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

    因此,当您使用XML看法,ID的获取一直秉乘:

    var oControl = this.byId('idText'); 
    
开始=>

我得到的输出列表从OData服务到valuehelprequest表,但无法过滤数据。

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

return Controller.extend("Xml_Search.controller.View1", { 
handlef4: function(){ 
    var oInput= this.getView().byId("Orderid"); 
    if(!this._oValueHelpDialog){ 
     this._oValueHelpDialog= new sap.ui.comp.valuehelpdialog.ValueHelpDialog("idValueHelp",{ 
     // supportRanges: true, 
     key: "Orderid", 
     descriptionKey: "OrderType", 
     ok: function(oEvent){ 
      var aTokens= oEvent.getParameter("tokens"); 
      oInput.setTokens(aTokens); 
      this.close(); 
     }, 
     cancel: function(){ 
      this.close(); 
     } 
     }); 
    } 
    var oColModel = new sap.ui.model.json.JSONModel(); 
    oColModel.setData({ 
     cols: [ 
       {label: "Orderid", template: "Orderid"}, 
       {label: "OrderType", template: "OrderType"}, 
       {label: "Planplant", template: "Planplant"} 
      ] 
    }); 
    var oTable = this._oValueHelpDialog.getTable(); 
    oTable.setModel(oColModel,"columns"); 
      var oModel = new  sap.ui.model.odata.ODataModel("/Gateway_Order/sap/opu/odata/SAP/ZP01_FIORI_SRV_01/"); 
    oTable.setModel(oModel); 
oTable.bindRows({path: "/OrderDataSet", filters: [new  
sap.ui.model.Filter("Orderid",sap.ui.model.FilterOperator.EQ,null, oInput)]} 
); 
this._oValueHelpDialog.open(); 
    } 
}); 
});