2017-02-19 7 views
0

Gibt es trotzdem, dass ich den aktuellen Routennamen bekommen kann? Es gibt eine getRoute Funktion, aber ich muss den Routennamen selbst übergeben. Wenn es einen Weg gibt, den Namen aller Routen vom Router-Objekt in Controllern zu bekommen, kann es auch hilfreich für mich sein. Zum Beispiel so etwas wie:Wie kann ich die aktuelle Route bekommen?

this.getRouter().getRoutes() 

Es gibt eine Funktion getViews aber ich konnte nicht eine gleiche für Routen finden.

Antwort

0
this.getRouter()._oRoutes 

scheint für mich zu funktionieren.

+0

Dies gibt alle Routen zurück. Und gibt es da sowieso aktuelle Route? –

+1

router._sActiveRouteName sieht so aus, als würde man den Namen der aktiven Route angeben. – Huseyin

2

Ich habe einfach die Standard-Router erweitert: https://gist.github.com/ffleige/1f080e5c0769085569188302b2e12040

es zu verwenden, die Standard-Router-Klasse in Ihrem manifest.json

"routing": { 
    "config": { 
    "routerClass": "my.app.MyRouter", 

Verwenden Sie den Router ersetzen in Ihrem Controller erweitern wie Diese

Diese Lösung nicht gewaltsam den Zugriff s an private Mitglieder und wird mit openui5 1.44 getestet.

2

Nicht so einfach wie es scheint, obwohl es immer noch ohne Lösungen von Drittanbietern möglich ist.

Nehmen wir an, dass die Routen (in manifest.json) sind:

"routes": [ 
      { 
       "pattern": "", 
       "name": "Main", 
       "view": "main", 
       "targetAggregation": "pages" 
      }, 
      { 
       "pattern": "create", 
       "name": "Create", 
       "view": "myView", 
       "targetAggregation": "pages" 
      }, 
      { 
       "pattern": "edit/{id}", 
       "name": "Edit", 
       "view": "myView", 
       "targetAggregation": "pages" 
      }, 
      { 
       "pattern": "view/{id}", 
       "name": "View", 
       "view": "myView", 
       "targetAggregation": "pages" 
      } 
     ] 

Also in diesem Fall würden Sie den aktuellen Namen bekommen: erstellen, bearbeiten oder Ansicht.

Anmerkung 1: In meinem Fall gibt es einen Blick/Controller („myView“) für drei verschiedene Arten von Displays Handhabung, aber es spielt keine Rolle - Sie können haben separate Ansichten/Controller als auch. (siehe Hinweis 2 für weitere Details).

Also hier ist, was Sie tun, um diejenigen Routennamen abzurufen:

Schritt 1:

Im gegebenen Controller (myView), verwenden Sie die Router Methode attachRouteMatched in der eingebauten onInit methode:

onInit: function(){ 
    var oRouter = sap.ui.core.UIComponent.getRouterFor(this); 
       oRouter.attachRouteMatched(this.routeMatched, this); 
} 

Schritt:

Im gleichen Controller, meist direkt unter der onInit Methode, erstellen Sie die Callback-Methode (in meinem Fall es heißt routeMatched):

routeMatched: function(oEvent){ 
      var oParameters = oEvent.getParameters(), 
      this.routeName = oParameters.name; // Yay! Our route name! 
} 

Schritt 3

Jetzt, wo immer Sie Zugriff auf Ihre Controller-Instanz haben, rufen Sie einfach die neue Eigenschaft auf: routeName. In den meisten Fällen (Dienstleistungen, kundenspezifische Steuerungen, der gleiche Controller) wird es sein:

this.routeName; 

Anmerkung 2: Das offensichtliche Problem mit diesem Ansatz ist die Tatsache, dass Sie diese Schritte für jeden wiederholen müßten Controller, der Zugriff auf die aktuell gestartete Route haben soll.

Verwandte Themen