我有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
。
答案 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');