如何使用应用程序前缀检索视图的ID?

时间:2018-07-19 08:52:36

标签: sapui5

要检索控件的前缀ID,可以使用视图的方法CreateID。但是,类sap.ui.core.Core中没有这样的方法。那么我怎么知道这一行中的viewID

sap.ui.getCore().byId(viewID)

1 个答案:

答案 0 :(得分:2)

Core是您正在加载到HTML文档中的所有应用程序所共有的。特定应用程序的特定视图可以具有不同的ID,具体取决于您已经加载了多少个不同的视图。创建一个以相关View ID为前缀的ID是有意义的,但是视图ID没有前缀,而只是自动生成的。

因此,要获取当前视图的ID,只需在其控制器中执行this.getView(),然后从返回的对象中获取ID。

如果您想知道与正在可视化/正在加载的视图不同的视图的ID,则需要浏览DOM中的所有视图,并设计自己的方式来识别它。

但是,我不建议您从另一个视图的控制器修改视图。每个视图只能由其控制器中的逻辑修改,而不能由其他控制器修改,以维护MVC体系结构的原理

编辑:

如何访问您的组件:

  1. 如果您将应用程序执行的上下文与Push.js脚本绑定,请使用this.getOwnerComponent()
  2. 如果不这样做,则需要使用sap.ui.getCore().getComponent('componentID')
  3. 从核心访问组件

现在的问题是如何知道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')