2016-05-11 3 views
0

ich ein MenuItem wie diese bekommen:Zugriff auf eine Methode außerhalb eines EventListeners? (SAPUI5)

new sap.ui.unified.MenuItem({ 
    text: "ID", 
    submenu: new sap.ui.unified.Menu({ 
     items: [this.oIdMenuButton = new sap.ui.unified.MenuItem({ 
      text: "IDs anzeigen/ausblenden", 
      icon: "resources/images/check.png", 
      select: this._onShowHideIdRequest 
     })] 
    }) 
}) 

Und ein Eventlistener wie folgt aus:

_onShowHideIdRequest: function (oControlEvent) { 

} 

Dieser Code ist in einer Komponente. Das Problem, das jetzt auftritt, ist folgendes: Ich kann nicht auf die Komponente selbst zugreifen. Denn wenn ich this. rufe, greife ich auf das MenuItem zu, das das Event ausgelöst hat. Wie kann ich auf Methoden außerhalb dieser EventListener-Methode zugreifen? Ich weiß, dass es sap.ui.getCore().byId(id) gibt, aber normalerweise kenne ich die ID meiner Komponente nicht. Und ich kann die ID auch nicht speichern, weil ich nicht auf die ID im EventHandler zugreifen kann.

Antwort

1

Mit dieser Codezeile den Aufruf an _onShowHideIdRequest ändern, um den Zugriff auf die Komponente zu ermöglichen.

this._onShowHideIdRequest.bind(this); 
+0

I don‘ Ich weiß, was du damit meinst. Wenn ich das "This" -Objekt in meinem Ereignis'log 'anmelde, dann gibt es, wie zuvor, das MenuItem geloggt ... – Chris

+0

Entschuldigung, ich habe Ihre Frage missverstanden lassen Sie mich meine Antwort ändern – Dopedev

+0

Vielen Dank !! Das funktioniert gut :) – Chris

0

Sie können eine große Menge an Argumenten übergeben zu select[1]

// a function that will be called 
function 
// same as above 
[ function ] 
// the function will be called, value of this is the context-object 
[ function, context ] 
// the function will be called, the value of this is the context-object, the data will be passed to the function as argument 
[ data, function, object ] 

Beispiel:

var ctx = {foo: "bar"}; 
new MenuItem({ 
    select: [ 
     function() { 
      console.log(this.foo); 
     }, ctx 
    ] 
}); 

in einer protokollierten "bar" führen sollte

Verwandte Themen