如何获取另一个视图 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');
我有 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');