2017-04-07 2 views
0

Ich habe einen Listenbericht, der nach Auswahl eines Elements zu einer Objektseite auffordert. Ich benutze keine FIORI Elemente, alles wurde von Grund auf neu erstellt. Die Objektseite hat eine statische Kopfzeile, aber ihr Hauptteil ändert sich von Element zu Element. Im Wesentlichen verwendet der Körper verschiedene Fragmente, die von einem Feld (Positionstyp) des ausgewählten Objekts abhängen. Mit anderen Worten:Methode getPath aufgerufen onBeforeRendering gibt undefined zurück

  • Po Typ 1 ---> Fragment A
  • Pos Typ 2 ---> Fragment B

all dies zu tun, auf der Steuerung der Objektseite, ich habe die folgende withing des onBeforeRendering Lifecycle-Methode implementiert:

onBeforeRendering: function() { 
     // // Set Fragment to be used 
     var oLayout = this.getView().byId("ObjectPageLayout"), 
      oFragment = sap.ui.xmlfragment(this._fragmentName()); 
     oLayout.addSection(oFragment); 
    }, 
    _fragmentName: function() { 
     var oModel = this.getView().getModel(); 
     var sPosType = oModel.getProperty(this.getView().getObjectBinding().getPath() + "/PositionType"); 
     var sFragment; 

     if (sPosType === "1") { 
      sFragment = "A"; 
     } else if (sPosType === "2") { 
      sFragment = "B"; 
     } 
     return sFragment; 
    }, 

Das Problem, das ich bin vor ist, dass dieser Code die folgende Fehlermeldung wirft: „nicht abgefangene (in Versprechen) Typeerror: nicht Eigentum lesen 'getPath' von undefined "

Der einzige Weg, wie ich dies zum Funktionieren gebracht habe, ist durch, anstelle der Methode OnBeforeRendering, ich OnInit verwendet. Auf diese Weise funktioniert getPath() einwandfrei. Wenn der Benutzer jedoch zum Listenbericht zurückkehrt und dann ein Element eines anderen Positionstyps auswählt, zeigt die Objektseite dasselbe Fragment an, das im vorherigen ausgewählten Element verwendet wurde.

Falls Sie sich fragen, unten Sie die Objektsicht finden:

<mvc:View height="100%" xmlns="sap.uxap" xmlns:core="sap.ui.core" xmlns:mvc="sap.ui.core.mvc" xmlns:m="sap.m" xmlns:semantic="sap.m.semantic" 
xmlns:forms="sap.ui.layout.form" xmlns:layout="sap.ui.layout" controllerName="objectview.controller" 
xmlns:aud="sap.uxap.sample.SharedBlocks.fragmentblocks"> 
<semantic:FullscreenPage id="page" navButtonPress="onNavBack" showNavButton="true" title="{i18n>ObjectPageTitle}"> 
<m:Page title="Object Page Title"> 
    <m:content> 
     <ObjectPageLayout id="ObjectPageLayout"> 
      <headerTitle> 
       <ObjectPageHeader id="ItemTitle" objectTitle="Item Title"> 
        <actions> 
         Some actions defined 

        </actions> 
       </ObjectPageHeader> 
      </headerTitle> 
      <headerContent> 
       Some Header Content 
      </headerContent> 
      <sections> 

      </sections> 
     </ObjectPageLayout> 
    </m:content> 
    <m:footer> 
     <m:Bar> 
      <m:contentRight> 
       Buttons added to the Footer 
      </m:contentRight> 
     </m:Bar> 
    </m:footer>  
</m:Page> 
</semantic:FullscreenPage> 

+0

Finnally konnte ich lösen (teilweise ab sofort). Problem war, dass Getpath bei allen Lifecycle-Methoden nichts zurückgibt. Mit onObjectMatched (onInInit gesetzt) ​​kann ich die Argumente abrufen und von dort entscheiden, welches Fragment als nächstes aufgerufen werden soll. Das Problem, das ich jetzt habe, ist, dass diese Lösung bei jedem Auswählen eines Elements den Inhalt des Abschnitts-Steuerelements hinzufügt. So muss ich wissen, wie man Inhalt nur vom Abschnittsteuerelement – Tincho

Antwort

0

Was passiert, ist, dass jedes Mal, wenn Sie auf die Seite gehen Sie einen neuen Abschnitt auf dem Behälter der Abschnitte hinzuzufügen.

Sie können alle vorhandenen Abschnitte entfernen, bevor Sie die neue hinzufügen.

oLayout.removeAllSections(); 
oLayout.addSection(oFragment); 
+0

zerstört/löscht/löscht Danke Eddie! Jetzt funktioniert es perfekt! – Tincho