ShellHeadItem的扩展(渲染?)

时间:2018-05-24 11:34:54

标签: javascript sapui5 sap render extend

我需要将该项添加到shell中。这是使用ShellHeadItem完成的,但我不希望它是一个图标,而是带有文本的按钮。

我可以在html中更改span子节点但是框架在几秒钟后或首次单击按钮后刷新shell。我试图消除这种"闪烁" (它是可见的)调用函数再次将它更改为文本,但它并不完美..

请您指点我应该如何扩展对象,我认为它是渲染对象?非常感谢你。

2 个答案:

答案 0 :(得分:0)

所以我用了

var oShellHeader = sap.ui.getCore().byId("shell-header");
oShellHeader.addEventDelegate({
    onAfterRendering: function () {
        // ... change the html
    }
})

答案 1 :(得分:0)

当您说“外壳”时,我假设您是指SAP“ ushell”,也称为Fiori Launchpad外壳。 UI5 SDK中的SAP API文档不是很全面,但是您可以做一些事情来实现SAPUI5公共方法中想要的功能。

首先,您要等到外壳已渲染。 SAP提供了一些提供的样板代码,用于返回将实现此目标的Promise(请注意-当您通过Web IDE从Fiori插件模板创建插件应用时,提供了该代码):

  _getRenderer: function() {
        var that = this,
            oDeferred = new jQuery.Deferred(),
            oRenderer;

        that._oShellContainer = jQuery.sap.getObject("sap.ushell.Container");
        if (!that._oShellContainer) {
            oDeferred.reject(
                "Illegal state: shell container not available; this component must be executed in a unified shell runtime context.");
        } else {
            oRenderer = that._oShellContainer.getRenderer("fiori2");
            if (oRenderer) {
                oDeferred.resolve(oRenderer);
            } else {
                // renderer not initialized yet, listen to rendererCreated event
                that._onRendererCreated = function(oEvent) {
                    oRenderer = oEvent.getParameter("renderer");
                    if (oRenderer) {
                        oDeferred.resolve(oRenderer);
                    } else {
                        oDeferred.reject("Illegal state: shell renderer not available after receiving 'rendererLoaded' event.");
                    }
                };
                that._oShellContainer.attachRendererCreatedEvent(that._onRendererCreated);
            }
        }
        return oDeferred.promise();
    }

此承诺返回shell renderer,您可以使用该stackblitz example 将一个项目添加到工具栏的开头或结尾。您需要注意的两个方法是“ addHeaderEndItem”和“ addHeaderItem”。 SDK中有说明如何使用它的说明,但是我认为理解实现的最简单方法是在下面看到我的示例:

        var rendererPromise = this._getRenderer();
        rendererPromise.then(function(oRenderer) {
            oRenderer.addHeaderEndItem(
                "sap.ushell.ui.shell.ShellHeadItem",
                {
                    icon:"sap-icon://action",
                    press: that._buttonPress.bind(that)
                },
                true,
                false,
                [oRenderer.LaunchpadState.App, oRenderer.LaunchpadState.Home]
            );
        });

您可以阅读shell渲染器API(上),以获取有关每个设置的详细信息,但要多加注意。

首先,请确保将其放置在组件(init)或视图控制器的“ onInit”中,以避免多次添加。如果您正在使用SAP Cloud Platform Portal服务来管理Fiori Launchpad,则最可取的选择是将其添加为插件。

第二,请不要使用“ addFloatingButton”方法。还没准备好我不会详细介绍,而只是说我花了很多时间来调试SAP原型,并且它们中有一个或两个错误。

最后,请在需要此按钮时加以考虑。 add方法末尾的数组包含枚举“ App”和“ Home”。从SAP:

  

启动板状态可以作为参数传递。值:App-运行Fiori app时启动板状态Home-打开主页时启动板状态

希望这是有道理的,因为我不能说得更好:)

祝你好运!