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

时间:2016-06-24 06:59:46

标签: sapui5 sap-fiori

我有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和标签1之一另一个用于标签2.一次只能看到一个。 Tab单击事件是在First.controller.js中编写的。我不知道如何从First访问ID的垂直布局(在第二个视图中)。

  

我正在探索标准html如何在SAPUI5上运行,因为我知道使用sap.m.IconTab

1 个答案:

答案 0 :(得分:1)

您面临的是动态创建元素。每次离开屏幕并返回屏幕时,都会重新生成项目,但它们不能具有相同的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');