"bestellmenge_tu"
kimliğine sahip tek bir giriş alanı içeren bir SAPUI5 uygulamasında Ayrıntılı görünümüm var. Bu görünüm her çağrıldığında, odak bu giriş alanında olmalıdır. Ne yazık ki, denetleyicinin onInit
yöntemindeki alana odaklanıldığında, odak ayarlanacaktır, ancak milisaniye sonra UI5 bunu alır ve ayrıntı görünümünün "geri gitme" düğmesine aktarır. giriş alanının blur
olay bir log.trace()
koyarakBir Görünümde İlk Odaklama Nasıl Belirlenir?
, bir odak uzak bir yöntem ile alınan zaman uyumsuz olarak adlandırılır sap.ui.define.NavContainer._afterTransitionCallback
(tetikleyici ve yürütme arasında bir window.setTimeout
ler) olarak adlandırılır öğrendik. Bu işlev, sadece görünümdeki ilk odaklanabilir öğeyi arar ve odağı acımasızca değiştirir.
Benim geçici çözüm bu "ilk odaklanabilir eleman" bulmak için kullanılan yöntem jQuery.fn.firstFocusableDomRef
yeniden tanımlamak oldu:
// 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);
}
})();
Ama bu herhangi sayfa yükleme DOM enine sırasında denilen bir performans sorunu (querySelector
olabilir oradan) ve istenen etki için çok fazla kodlama var.
Bunu başarmak için daha kolay bir yöntem var mı?
Ben
<mvc:View controllerName="zrt_dispo.view.Detail"...>
<Page id="detailPage" initialFocus="bestellmenge_tu"> <!-- ID of the element to carry the focus -->
</Page>
</mvc:view>
Ne onAfterRendering' 'hakkında: Burada
bir demo? Bu, 'init' çağrısından sonra çağrılmalı ve navBack düğmesinin odağı aldıktan sonra da umarız. – MarcSanırım bunu denedim, ancak gecikmiş NavContainer işleminin ne zaman yapıldığına bağlı olarak sadece rastgele çalıştı. – rplantiko
@Marc @rplantiko, "onAfterRendering" öğesinde odağı ayarlamak yalnızca bir kez çalışır. Kullanıcı görünüme geri döndüğünde, görünüm kendisini yeniden oluşturmaz (açıkça yapılmadıkça). 'AfterShow' gibi navigasyonla ilgili etkinlikleri kullanmamız gerekiyor. Benim [aşağıda yanıtı gör] (https://stackoverflow.com/a/48559689/5846045) – boghyon