扩展 ShellHeadItem(渲染?)
Extending of ShellHeadItem (render?)
我需要将项目添加到 shell。这是使用 ShellHeadItem 完成的,但我不希望它是一个图标,而是带有文本的按钮。
我可以在 html 中更改 span 子项,但框架会在几秒后或首次单击按钮后刷新 shell。我试图通过调用函数将其再次更改为文本来消除这种“闪烁”(它是可见的),但它并不完美..
能否请您指导我如何扩展对象,我认为它是渲染对象?非常感谢。
所以我用了这个
var oShellHeader = sap.ui.getCore().byId("shell-header");
oShellHeader.addEventDelegate({
onAfterRendering: function () {
// ... change the html
}
})
当您说 "shell" 时,我假设您指的是 SAP“ushell”,也称为 Fiori Launchpad shell。 UI5 SDK 中的 SAP API 文档不是很全面,但是您可以在 SAPUI5 public 方法中做一些事情来实现您想要的。
首先,您要等到 shell 呈现。 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();
}
此承诺 returns shell renderer 可用于将项目添加到工具栏的 header 开头或结尾。您需要注意的两种方法是 "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(上文)以了解有关每个设置的更多信息,但请注意几句。
首先,确保将其放入组件(初始化)或视图控制器的 "onInit" 中,以避免多次添加。如果您使用 SAP Cloud Platform Portal 服务来管理您的 Fiori Launchpad,最好的选择是将其添加为插件。
其次,暂时不要使用 "addFloatingButton" 方法。它还没有准备好。我不会详细说明,但我只是说我花了很多时间调试 SAP 原型,它们有一两个深层次的错误。
最后,请考虑何时需要此按钮。添加方法末尾的数组包含枚举 "App" 和 "Home"。来自 SAP:
The launchpad states that can be passed as a parameter. Values: App - launchpad state when running a Fiori app Home - launchpad state when the home page is open
希望这是有道理的,因为我再清楚不过了:)
祝你好运!
我需要将项目添加到 shell。这是使用 ShellHeadItem 完成的,但我不希望它是一个图标,而是带有文本的按钮。
我可以在 html 中更改 span 子项,但框架会在几秒后或首次单击按钮后刷新 shell。我试图通过调用函数将其再次更改为文本来消除这种“闪烁”(它是可见的),但它并不完美..
能否请您指导我如何扩展对象,我认为它是渲染对象?非常感谢。
所以我用了这个
var oShellHeader = sap.ui.getCore().byId("shell-header");
oShellHeader.addEventDelegate({
onAfterRendering: function () {
// ... change the html
}
})
当您说 "shell" 时,我假设您指的是 SAP“ushell”,也称为 Fiori Launchpad shell。 UI5 SDK 中的 SAP API 文档不是很全面,但是您可以在 SAPUI5 public 方法中做一些事情来实现您想要的。
首先,您要等到 shell 呈现。 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();
}
此承诺 returns shell renderer 可用于将项目添加到工具栏的 header 开头或结尾。您需要注意的两种方法是 "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(上文)以了解有关每个设置的更多信息,但请注意几句。
首先,确保将其放入组件(初始化)或视图控制器的 "onInit" 中,以避免多次添加。如果您使用 SAP Cloud Platform Portal 服务来管理您的 Fiori Launchpad,最好的选择是将其添加为插件。
其次,暂时不要使用 "addFloatingButton" 方法。它还没有准备好。我不会详细说明,但我只是说我花了很多时间调试 SAP 原型,它们有一两个深层次的错误。
最后,请考虑何时需要此按钮。添加方法末尾的数组包含枚举 "App" 和 "Home"。来自 SAP:
The launchpad states that can be passed as a parameter. Values: App - launchpad state when running a Fiori app Home - launchpad state when the home page is open
希望这是有道理的,因为我再清楚不过了:)
祝你好运!