要检索控件的前缀ID,可以使用视图的方法CreateID。但是,类sap.ui.core.Core中没有这样的方法。那么我怎么知道这一行中的viewID
sap.ui.getCore().byId(viewID)
答案 0 :(得分:2)
Core是您正在加载到HTML文档中的所有应用程序所共有的。特定应用程序的特定视图可以具有不同的ID,具体取决于您已经加载了多少个不同的视图。创建一个以相关View ID为前缀的ID是有意义的,但是视图ID没有前缀,而只是自动生成的。
因此,要获取当前视图的ID,只需在其控制器中执行this.getView()
,然后从返回的对象中获取ID。
如果您想知道与正在可视化/正在加载的视图不同的视图的ID,则需要浏览DOM中的所有视图,并设计自己的方式来识别它。
但是,我不建议您从另一个视图的控制器修改视图。每个视图只能由其控制器中的逻辑修改,而不能由其他控制器修改,以维护MVC体系结构的原理
编辑:
this.getOwnerComponent()
。sap.ui.getCore().getComponent('componentID')
现在的问题是如何知道componentID。好吧,我在这里看到两个选项,为您的组件提供一个ID,或将自动生成的组件ID映射到Core变量中。
选项1:定义组件ID
每当初始化它时(通常在index.html文件中),您都可以这样做:
<script>
sap.ui.getCore().attachInit(function() {
sap.ui.component({
id: "myComponentID",
async: true,
name: "myNamespace", // The namespace you defined in the bootstrap tag and points to the folder where the Component.js file is stored
manifestFirst: true
}).then(function(oNewComponent){
new sap.m.Shell({
app: new sap.ui.core.ComponentContainer({
component: oNewComponent,
height : "100%"
})
}).placeAt("content");
})
});
</script>
使用此选项,您可以将组件检索为sap.ui.getCore().getComponent('myComponentID')
,当然也可以使用sap.ui.getCore().getComponent('myComponentID').getModel('modelName')
在组件中注册的任何模型
选项2:将自动生成的组件ID与您的标识符映射到Core变量中
我不喜欢更改组件ID,有时您没有机会更改它。因此,过去我就像下面的代码片段一样(可能不是最好的/优雅的解决方案,但是效果很好)
Component.js
/**
* The component is initialized by UI5 automatically during the startup of the app and calls the init method once.
* @public
* @override
*/
init: function() {
//Map Component ID in a Core variable
if(!sap.ui.getCore()._data_oLoadedComponents){
sap.ui.getCore()._data_oLoadedComponents = {};
}
sap.ui.getCore()._data_oLoadedComponents.myCustomComponentId = this.getId(); // myCustomComponentId is the ID you want to use for this specific app
// END: Map Component ID in a Core Variable
// call the base component's init function
UIComponent.prototype.init.apply(this, arguments);
// set the device model
this.setModel(models.createDeviceModel(), "device");
}
因此,现在您可以访问从您的映射变量获取自动生成的ID的任何组件,如下所示:
sap.ui.getCore().getComponent(sap.ui.getCore()._data_oLoadedComponents.myCustomComponentId)
,还可以像这样访问模型:
sap.ui.getCore().getComponent(sap.ui.getCore()._data_oLoadedComponents.myCustomComponentId).getModel('modelName')