SAPUI5 根据匹配的上下文/路由动态更改文本

Posted

技术标签:

【中文标题】SAPUI5 根据匹配的上下文/路由动态更改文本【英文标题】:SAPUI5 change text dynamically based on context/route matched 【发布时间】:2015-04-30 14:49:15 【问题描述】:

我目前正在开发一个用于用户创建和用户编辑过程的 XML 视图。

是否有一种优雅的方式,例如根据我使用的模式(创建用户/编辑用户)更改视图的标题?最好是不隐藏 DOM 元素的方式。

【问题讨论】:

查看localization上的开发者指南,里面有很多信息。 他不是在谈论本地化,他是在谈论根据上下文设置的动态文本 【参考方案1】:

第 1 步:在您的控制器中说 S1.controller.js ,如果您已经使用 getHeaderFooterOptions 定义了 headerFooter 就好了。否则定义它

    getHeaderFooterOption:function()
    var that = this;
    var objHeaderFooterOptions = 
        sI18NFullscreenTitle: "CREATE_TITLE",//you need to define the value in i18n files
        //
        /*oEditBtn: 
            sId: "BTN_SEND",
            sI18nBtnTxt: "USER_CREATE",
            onBtnPressed: function(evt) 
                that.handleCreate(evt);
            
        ,*/
        buttonList: [
                 //your footer buttons go here
                  ]
    ;
    return objHeaderFooterOptions;
    

现在,在控制器的 onInit() 中:

onInit: function () 
    var that = this;
    this.oRouter.attachRouteMatched(function (oEvent) 

        if (oEvent.getParameter("name") === "create")  //the name you have given for the view in **Component.js**
            //your initial create login
        
      //this will be executed whent you come as update context
        if (oEvent.getParameter("name") === "update")  //the name you have given for the view in Component.js
            var editContextHeaderFooter = that.getHeaderFooterOptions();
            editContextHeaderFooter.sI18NFullscreenTitle = "UPDATE_TITLE" //define the value in i18n file
                //you can edit other values also, example you want a different button in the footer.
            that.setHeaderFooterOptions(editContextHeaderFooter);

        
    );

Component.js的元数据中

fullScreenPageRoutes : 
            // fill the routes to your full screen pages in here.
                "create" : 
                    "pattern" : "",
                    "view" : "S1"
                ,
                "update" : 
                    "pattern" : "update/context",
                    "view" : "S1"
                
            

i18n.properties 文件中

#XTIT: Create Screen Title
CREATE_TITLE: Create New User

#XTIT: Update Screen Title
UPDATE_TITLE: Update User

【讨论】:

您好,感谢您的回答! “setHeaderFooterOptions”从何而来?如果我尝试调用它,它会说这不是一个函数。 您在使用脚手架控制器吗?如果没有,请把你的控制器代码和xml视图 这是我的代码(我删掉并重命名,所以不要混淆)gist.github.com/anonymous/57281d751617c0ed7a96 删除我所说的!! :) 这很容易.. 给您的页面提供 ID。然后使用 this.byId("pageId").setTitle("your text"); 设置【参考方案2】:

如果您使用的是纯 UI5 应用程序:

 onRouteMatched : function(oEvent) 
    var that = this;
    if (oEvent.getParameter("name") === "user")  //the name you have given for the view in **Component.js**
        //your initial create login
    that.byId("myPage").setTitle("Create New user");
   that.byId("objHeader").setTitle("Update user");
    
  //this will be executed when you come as update context
    if (oEvent.getParameter("name") === "edituser") 

        that.byId("myPage").setTitle("Update user");
        that.byId("objHeader").setTitle("Update user");
    
  

XML 中类似的添加 ID:

<Page id="myPage" class="sapUiFioriObjectPage" title="i18n>createNewUserHdrTitle"
        showNavButton="true" navButtonTap="onNavBack">
        <ObjectHeader id="objHeader" title="i18n>createNewUserHdrTitle">
        </ObjectHeader>
    </Page>

如果您使用 i18n 文本,请确保将翻译资源绑定到您的视图。

【讨论】:

基本上这是我不想走的路,因为控制器文件中的 UI 逻辑太多了。有没有办法使用前缀?例如i18n&gt;new_titlei18n&gt;edit_title? 据我所知没有其他解决方案!

以上是关于SAPUI5 根据匹配的上下文/路由动态更改文本的主要内容,如果未能解决你的问题,请参考以下文章

Blazor University (22)路由 —— 定义路由

SAPUI5:更改 url 中的 id 后如何重定向到 NotFound 页面?

当所有路由根据条件动态加载时如何重定向到路由?

SAPUI5 多重聚合绑定

根据登录用户在运行时更改数据库架构

嵌套路由 SAPUI5