2017-05-04 4 views
0

Ich versuche, einige von Odata Model abgerufene Daten in einer XML-Ansicht anzuzeigen. In Component.js, ich ein Modell mit Service-URL erstellen und es funktioniert wie gewohnt.Element an Steuerelemente binden SAPUI5

var oDataModel = new sap.ui.model.odata.v2.ODataModel("http://server:port/sap/opu/odata/SAP/ZWYMB_SRV", { 
      user:"abapleader", 
      password: "[email protected]", 
      headers: { 
       "sap-client": 300 
      }, 
      useBatch:false 
     });   
     this.setModel(oDataModel, "oDataModel"); 

Bisher habe ich es geschafft, Daten zu erhalten model.read() Funktion zu meistern verwenden.

Jetzt muss ich die Detailansicht anzeigen. Mein Code für onInit Veranstaltung unter:

  this.router.getRoute("zwm01detail").attachPatternMatched(this._onObjectMatched.bind(this)); 

     }, 
     _onObjectMatched: function(oEvent) { 
      var that = this; 
     var MaWorkDoc = oEvent.getParameter("arguments").MaWorkDoc; 
      this.getModel("oDataModel").metadataLoaded().then(function() { 
       var sPath = that.getModel("oDataModel").createKey("/WorkDocList", { 
        MaWorkDoc: MaWorkDoc, 
        Pernr: "0001" 
       }); 
       console.log(sPath); 
       that.getView().bindElement({ 
        path:sPath 
       }); 
      }); 

Die sPath als ich mit ausgedruckt console.log(sPath):/WorkDocList (MaWorkDoc = '1110000001', pernr = '0001'), was ich denke, ist richtig. Ich habe auch das Backend mit diesem Pfad implementiert und getestet und grundsätzlich sind die Dinge in Ordnung. Aber ich weiß nicht, warum ich keine Daten über die Ansicht anzeigen kann.

Detail.view.xml:

<Text text="{/MaWorkDoc}" maxLines="0"/> 

Irgendwelche Vorschläge, bitte?

Antwort

0

Ich glaube nicht, dass der Detailverbindungscode innerhalb des .metadataLoaded-Handlers sein sollte. Eher sollte es direkt in _onObjectMatched sein.

Ich meine so.

_onObjectMatched: function(oEvent) { 
     var that = this; 
     var MaWorkDoc = oEvent.getParameter("arguments").MaWorkDoc; 
     var sPath = that.getModel("oDataModel").createKey("/WorkDocList", { 
       MaWorkDoc: MaWorkDoc, 
       Pernr: "0001" 
      }); 
      console.log(sPath); 
      that.getView().bindElement({ 
       path:sPath 
      }); 
     } 
+0

Könnten Sie bitte mehr Detail Sir sein? Wie implementiere ich das _onObjectMatched-Ereignis in meinem Code? Es tut mir leid, wenn du dich unwohl fühlst, aber ich bin total neu darin. –

+0

Die Antwort wurde aktualisiert – krisho

0

Weil Sie Ihr Modell einen Namen gegeben haben, müssen Sie diesen Namen in der Bindung verwenden. d. h. <Text text="{oDataModel>/MaWorkDoc}" maxLines="0"/>

+0

Sir Ich habe bereits versucht, add oDataModel> aber es funktioniert immer noch nicht –

0

Also habe ich mit der Dokumentation gearbeitet und herausgefunden, dass es model Parameter gibt, der hilft.

Um genauer zu sein, ich hinzufügen, wie unten model in view.bindElement erklären:

that.getView().bindElement({ 
        path:sPath, 
//** oDataModel = name of the model 
        model: "oDataModel" 
       }); 

Wenn es eine bessere Lösung ist, würde ich sehr froh, es zu wissen. Vielen Dank.!