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