#sapui5 #sap-fiori
#sapui5 #sap-fiori
Вопрос:
Я хочу добавить событие щелчка ко всем плиткам на панели запуска без изменения какого-либо кода внутри плитки. Для этого я создаю плагин FLP. Чтобы прикрепить событие нажатия к плитке, я попытался получить плитки, используя следующий код:
sap.ushell.Container.getService("LaunchPage").getGroups().then(function(aGroups) {
for (var i = 0; i < aGroups.length; i ) {
var aTiles = sap.ushell.Container.getService("LaunchPage").getGroupTiles(aGroups[i]);
for (var j = 0; j < aTiles.length; j ) {
aTiles[j].getImplementationAsSapui5().getTileControl().attachPress(function(oEvent) {
console.log("Tile clicked")
});
}
}
});
Ошибки нет, но она не показывает «Щелчок по плитке» при нажатии на любую плитку. Если я получаю плитки, используя следующий код, он работает нормально:
var aTiles = sap.ushell.utils.getVisibleTiles();
for (var j = 0; j < aTiles.length; j ) {
aTiles[j].attachPress(function(oEvent) {
console.log(oEvent.getSource().getBindingContext().getObject().object.getTitle());
});
}
Проблема в том, что он возвращает только видимые плитки на экране.
Может кто-нибудь, пожалуйста, помочь мне здесь?
Ответ №1:
Я буду использовать ваш код, и если я смогу дать вам некоторую информацию, я отвечу снова.
Я даю вам две идеи для возможных обходных путей для ваших сомнений:
- В моем случае, для выполнения некоторых пользовательских действий с домашними плитками, я создал пользовательский тип плитки, возможно, вы могли бы рассмотреть его.
- Другим решением, которое я создал для отправки событий навигации Google Analytics, было создание плагина SAPUI5 для обработки изменений хэша. Тогда я знаю, где я и куда я хочу пойти.
С уважением
Комментарии:
1. Если я использую изменение хэша, оно будет срабатывать даже при навигации внутри приложения. И в этом случае, как я получу заголовок плитки из хэш-значения?
2. В моем случае я использую переменную в плагине sapui5 для проверки некоторого поведения. Кроме того, для меня хэш был лучше, чем заголовок, потому что SAP FLP является многоязычным, и для некоторой статистики хэш одинаков на испанском, английском и т. Д
3. ах, я вижу преимущество использования хэша. Есть ли способ узнать группу, из которой нажимается плитка, для случаев, когда плитка присутствует в нескольких группах.
4. да, я надеюсь, что другая точка зрения поможет вам найти решение.
Ответ №2:
Я решил это, прикрепив событие изменения хэша. Я получаю все имена плиток и значения хэша с помощью службы launchPage, а затем использую это при изменении хэша, чтобы соответствовать значению хэша для получения заголовка. Даже если плитка открывается напрямую с использованием URL-адреса, событие будет захвачено.
sap.ushell.Container.getService("LaunchPage").getGroups().then(function(aGroups) {
for (var i = 0; i < aGroups.length; i ) {
var aGrpTiles =
sap.ushell.Container.getService("LaunchPage").getGroupTiles(aGroups[i]);
for (var j = 0; j < aGrpTiles.length; j ) {
var sTileTitle = sap.ushell.Container.getService("LaunchPage").getTileTitle(aGrpTiles[j]);
var sTileTarget = sap.ushell.Container.getService("LaunchPage").getCatalogTileTargetURL(aGrpTiles[j]);
if (sTileTitle.indexOf("App Launcher") === 0) {
sTileTitle = sTileTarget;
}
window.UserTiles.push({
title: sTileTitle,
url: sTileTarget
});
}
}
}.bind(this));
window.addEventListener("hashchange", this._onHashChange.bind(this), true);
_onHashChange: function(oEvent) {
var sOldHash = this._getHashFromURL(oEvent.oldURL);
var sNewHash = this._getHashFromURL(oEvent.newURL);
//handled for the change of URL while navigation within the app
if (sOldHash !== sNewHash) {
console.log("new tile");
var tile = window.UserTiles.filter(function(o) {
if (o.url) {
return sap.ushell.utils.getBasicHash(o.url).indexOf(sHash) === 0;
}
});
console.log("tile title:" tile[0].title, "tile hash:" tile.url);
}
}