导航后如何关注输入场

时间:2017-04-10 06:10:45

标签: sapui5

如何在从子页面导航后关注输入字段?

儿童页面

onNavigateBtnClick: function() {
    var oHistory = History.getInstance();
    var sPreviousHash = oHistory.getPreviousHash();
    if (sPreviousHash !== undefined) {
        history.go(-1);
    } else {
        var bReplace = true;
        this.getRouter().navTo("HomePage", {}, bReplace);
    }
},

父页面

onAfterRendering: function() {
    jQuery.sap.delayedCall(500, this, function() {
        this.getView().byId("InputField").focus();
    });
},

问题

  1. 第一次点击导航后退按钮时,会调用onAfterRendering挂钩。
  2. 如果我在子页面上执行某些操作,然后单击导航后退按钮,则不会调用onAfterRendering方法。

1 个答案:

答案 0 :(得分:0)

解决此问题的三个步骤:

将视图的<App>标签更新为autoFocus="false"。这样可以防止UI5自动聚焦视图的第一个输入。

在控制器的onInit中,将一种方法附加到导航视图时将触发的路由,如下所示:

onInit: function(){
    var router = sap.ui.core.UIComponent.getRouterFor(this);

    router.getRoute("routeTargetName").attachPatternMatched(this.onNavTo, this);
}

在控制器中声明onNavTo方法,该方法将设置输入焦点:

onNavTo: function(route){
    this.byId("MyInputField").focus();
}

现在,每当您使用路由器到{​​{1}}时,navTo("routeTargetName")方法都会触发,从而将重点放在该字段上。