2017-01-03 100 views
1

我試着使用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://stackoverflow.com/questions/27021011 – ppovoski

回答

3

你的問題是你如何獲取你的表的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 
  • IN XML視圖,控件標識總是與視圖的由框架ID自動前綴。這與我們的JS 2路相似。 (JS的方法1在XML視圖中永遠不可能)。
  • 查看代碼:

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

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

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

    我得到的輸出列表從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(); 
        } 
    }); 
    });