Wie wird der anfängliche Fokus in einer Ansicht festgelegt?

Ich habe eine Detailansicht in einer SAPUI5-App, die ein einzelnes Eingabefeld mit der ID @ enthäl"bestellmenge_tu". Bei jedem Aufruf dieser Ansicht sollte der Fokus auf diesem Eingabefeld liegen. Leider beim Setzen des Fokus auf das Feld in der SteuerungonInitei der @ -Methode wird der Fokus gesetzt, aber einige Millisekunden später entfernt die UI5 ihn und überträgt ihn auf die Schaltfläche "Navigation zurück" in der Detailansicht.

Durch Setzen eineslog.trace() im Eingabefeldblur Event, fand ich heraus, dass der Fokus von einer Methode namens @ genommen wisap.ui.define.NavContainer._afterTransitionCallback welches asynchron aufgerufen wird (einigewindow.setTimeouts zwischen Trigger und Ausführung). Die Funktion sucht einfach nach dem ersten fokussierbaren Element in der Ansicht und stellt es brutal scharf.

Meine Problemumgehung bestand darin, die Methode @ neu zu definierejQuery.fn.firstFocusableDomRef welches verwendet wird, um dieses "erste fokussierbare Element" zu finden:

// DIESE KANONE FUNKTIONIERT
jQuery.fn.firstFocusableDomRef = (function() {
  var _default = jQuery.fn.firstFocusableDomRef;
  return function() {
    var bestellmenge_tu = document.querySelector("input[id$='bestellmenge_tu-inner']");
    if (bestellmenge_tu &&
        bestellmenge_tu.style.display !="none" &&
        bestellmenge_tu.style.visibility != "hidden") return bestellmenge_tu;
    else return _default.apply(this);
  }
})();

Aber dies könnte ein Leistungsproblem sein querySelector wird während der DOM-Übertragung bei @ aufgerufirgendei Seite von da an laden), und es ist zu viel Code für den gewünschten Effekt.

ibt es eine einfachere Methode, um dies zu erreiche

Ich dachte an so etwas wie

<mvc:View controllerName="zrt_dispo.view.Detail"...>
  <Page id="detailPage" initialFocus="bestellmenge_tu">  <!-- ID of the element to carry the focus -->
  </Page>
</mvc:view>

Antworten auf die Frage(4)

Ihre Antwort auf die Frage