如何获取另一个视图 SAPUI5 的元素 ID

How to get element's id of another view SAPUI5

我有 3 个观点,第一、第二和第三。我需要从第一个视图访问垂直布局的第二个视图的 id。为此,我使用 sap.ui.getCore().byId("__xmlview1--spend_layt"); 来检索它。它有效,但是当我导航到第三个视图并返回时,id 更改为 __xmlview28--spend_layt 并且控件不起作用。如何解决这个问题?

编辑:

First.view.xml

<mvc:View xmlns:mvc="sap.ui.core.mvc" xmlns="sap.m" controllerName="budgetspend.controller.First" xmlns:html="http://www.w3.org/1999/xhtml" displayBlock="true"> <App id="BA_APP"> <pages> <HBox width="100%" height="100%" id="header_container"> <items> <Image class="logo" src="../images/logo_new.png"/> <Image class="header" src="../images/header-bg.png"/> <html:ul class="tab"> <html:li> <html:a id="onBud" class="tablinks active">Tab 1 </html:li> <html:li> <html:a id="onSpend" class="tablinks">Tab 2</html:a> </html:li> </html:ul> <mvc:XMLView viewName="budgetspend.view.second"/> </items> </HBox> </pages> </App> </mvc:View>

在第二个视图中,我使用了 2 个垂直布局。一个用于选项卡 1,另一个用于选项卡 2。一次只能看到一个。 Tab点击事件写在First.controller.js中。我不知道如何从 First 访问垂直布局(在第二个视图中)的 ID。

I am just exploring how standard html will work on SAPUI5 as I am aware of using sap.m.IconTab.

你所面临的是由于元素的动态创建。每次离开屏幕并返回时,项目都会重新生成,但它们不能具有相同的 ID,因为它们以前被使用过。

一个解决方案是创建一个 Utils 文件夹,然后创建一个对象,比方说 UIHelper

这个文件看起来像这样:

jQuery.sap.declare('my.app.Utils.UIHelper');

my.app.Utils.UIHelper = {
  controllerInstance1 : null,
  controllerInstance2 : null,
  controllerInstance3 : null,

 //Add "getters and setters" for each of these attributes (repeat for Controller 2 & 3)
 setControllerInstance1 : function(oController){
      this.controllerInstance1 = oController;
  },
 getControllerInstance1 : function(){
    return this.controllerInstance1;
  }

};

现在,在每个视图的控制器文件中,在文件顶部添加以下行:

jQuery.sap.require('my.app.Utils.UIHelper');

并且在这些控制器的 onInit 事件中,您在 UIHelper 对象上设置控制器实例:

my.app.Utils.UIHelper.setControllerInstance1(this);

当你想从代码中的任何地方获得不同的 views 时,假设 views 被分配给其中一个控制器,你可以只使用以下内容:

my.app.Utils.UIHelper.getControllerInstance1().getView();

更新问题后在我的回答中更新:

要从第二个视图访问布局,您可以执行以下操作:

var layout = my.app.Utils.UIHelper.getControllerInstanceView2().byId('spend_layt');