Расширение ShellHeadItem (рендер?) - PullRequest
0 голосов
/ 24 мая 2018

Мне нужно добавить предмет в оболочку.Это делается с помощью ShellHeadItem, но я не хочу, чтобы это был значок, а кнопка с текстом.

Я могу изменить дочерний элемент span в html, но среда обновляет оболочку через несколько секундили после первого нажатия на кнопку.Я пытаюсь устранить это "мерцание" (оно видно) с помощью вызова функций для повторного его преобразования в текст, но оно не идеально.

Не могли бы вы указать мне, как следует расширять объекти я думаю, что это объект рендеринга?Большое спасибо.

Ответы [ 2 ]

0 голосов
/ 17 июля 2018

Когда вы говорите «оболочка», я предполагаю, что вы имеете в виду SAP « ushell », также известный как оболочка Fiori Launchpad.Документация по API SAP в UI5 SDK не является исчерпывающей, но есть некоторые вещи, которые вы можете сделать, чтобы достичь того, что вы хотите в общедоступных методах SAPUI5.

Во-первых, вы хотите подождать, пока оболочка не отобразится.В SAP есть примерный код для возврата Обещания, которое будет достигать этого (обратите внимание, это код, предоставляемый при создании приложения-плагина из шаблона плагина Fiori через Web IDE):

  _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();
    }

Это обещание возвращается оболочка , которую вы можете использовать для добавления элемента в начало или конец заголовка панели инструментов.Вы должны обратить внимание на два метода: «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]
            );
        });

Вы можете прочитать API рендерера оболочки (выше) длябольше информации о каждой настройке, но пара слов предостережения.

Во-первых, убедитесь, что вы помещаете это в "onInit" компонента (init) или контроллера представления, чтобы избежать многократного добавления.Наиболее предпочтительным вариантом является добавление его в качестве плагина, если вы используете службу портала SAP Cloud Platform для управления вашей Fiori Launchpad.

Во-вторых, пока не используйте метод addFloatingButton.Это не готово.Я не буду вдаваться в подробности, но давайте просто скажем, что я потратил несколько часов на отладку прототипов SAP, и в них есть одна или две ошибки.

Наконец, примите во внимание, когда вам нужна эта кнопка.Массив в конце метода add содержит перечисления «App» и «Home».Из SAP:

Панель запуска сообщает, что можно передать в качестве параметра.Значения: App - состояние панели запуска при запуске приложения Fiori. Home - состояние панели запуска, когда домашняя страница открыта

Надеюсь, это имеет смысл, поскольку я не могу сформулировать это лучше, чем это:)

Удачи!

0 голосов
/ 16 июля 2018

Так что я использовал это

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