FLP插件中如何给Tile添加点击事件?
How to add a click event to Tile in FLP plugin?
我想将点击事件添加到启动板中的所有磁贴,而不更改磁贴内的任何代码。为此,我正在创建一个 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")
});
}
}
});
没有错误,但在点击任何图块时不显示“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());
});
}
问题是屏幕上只有 returns 个可见图块。
有人可以帮我吗?
我会使用你的代码,如果我能给你一些信息,我会再次回复。
我给你两个可能的解决方法来解决你的疑问:
- 在我的例子中,为了对家庭瓷砖进行一些自定义操作,我创建了一个自定义瓷砖类型,也许你可以考虑一下。
- 我为发送 Google Analytics 导航事件创建的其他解决方案是创建一个 SAPUI5 插件来处理哈希更改。然后我知道我在哪里,我想去哪里。
此致
我已经通过附加哈希更改事件解决了它。我使用 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);
}
}
我想将点击事件添加到启动板中的所有磁贴,而不更改磁贴内的任何代码。为此,我正在创建一个 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")
});
}
}
});
没有错误,但在点击任何图块时不显示“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());
});
}
问题是屏幕上只有 returns 个可见图块。
有人可以帮我吗?
我会使用你的代码,如果我能给你一些信息,我会再次回复。
我给你两个可能的解决方法来解决你的疑问:
- 在我的例子中,为了对家庭瓷砖进行一些自定义操作,我创建了一个自定义瓷砖类型,也许你可以考虑一下。
- 我为发送 Google Analytics 导航事件创建的其他解决方案是创建一个 SAPUI5 插件来处理哈希更改。然后我知道我在哪里,我想去哪里。
此致
我已经通过附加哈希更改事件解决了它。我使用 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);
}
}