关于 SAP UI5 应用 render2 实例异步创建的编码实现

发布时间 2023-03-24 23:42:04作者: JerryWang_汪子熙

本文是笔者这篇教程的详细解释:

默认的 async 标志位为 false:

默认的 renderer 名称为 Fiori2:

提取出 renderer 的配置:

只有一个 shell-home 的配置。

错误消息从这里报出来的:

 Log.error("sap.ushell.Container.createRenderer() should always be called with bAsync:true.");
            return getRendererInstance(sModule);

更改一下 index.html 的配置:

		sap.ui.getCore().attachInit(() => sap.ushell.Container.createRenderer("fiori2", true).placeAt("content"))

然后就进入 async 分支了:

返回的是一个 Promise 对象:

改成这段代码:

果不其然,Promise resolve 之后,回调函数里返回的是一个 renderer 实例:

修改成如下代码后,问题消失:

sap.ui.getCore().attachInit(() => sap.ushell.Container.createRenderer("fiori2", true).then(
			(oRenderer) => {
				oRenderer.placeAt("content");
			}
		));

sap.ui.base.Object.extend是SAP UI5中的一种继承方式,用于创建一个新的对象类型,并基于现有对象类型创建子类型。它允许在创建自定义对象时继承现有对象的属性和方法,并扩展它们以满足特定需求。

使用sap.ui.base.Object.extend可以创建自定义对象类,这些类可以在SAP UI5应用程序中用作模型、控制器、视图等组件。这种方式还允许开发人员通过将属性和方法添加到新对象类中来扩展现有类,从而满足特定的需求。这样做可以避免在创建新类时重复编写相同的代码,从而提高代码的可重用性和可维护性。

使用sap.ui.base.Object.extend的基本语法如下:

var MyObject = sap.ui.base.Object.extend("my.namespace.MyObject", {
    metadata : {
        properties : {
            // define properties here
        },
        events : {
            // define events here
        },
        methods : {
            // define methods here
        }
    },

    constructor : function() {
        // define constructor here
    },

    // define additional methods here
});

上述代码创建了一个名为my.namespace.MyObject的新对象类型,并基于sap.ui.base.Object类创建了一个子类型。新类型可以在metadata属性中定义属性、事件和方法,并可以在constructor函数中初始化对象。创建新对象类型后,可以使用以下语法创建对象实例:

var myObject = new my.namespace.MyObject();