sap.m.TileContainer scrollIntoView问题

时间:2015-12-02 14:40:52

标签: sapui5

我有一个包含 TileContainer 的XML视图,该视图绑定到用于创建 StandardTiles 的模型。 XML片段是:

++a / b * b-- - a

这是完美的工作,正确的瓷砖正在显示等。当我点击瓷砖时,会出现导航,我想“记住”点击了哪个瓷砖(按索引)所以当返回时我可以滚动到那个瓷砖。这是在tile的按下事件处理程序(<TileContainer id="tilelist" tiles="{Applications}"> <tiles> <StandardTile name="{ID}" icon="{Icon}" title="{Name}" press="doNavigation" info="{Description}" number="{path : 'Number', formatter: 'linxas.com.fiori.launchpad.util.Formatter.formatUsingURL'}" numberUnit="{NumberUnit}"/> </tiles> </TileContainer> 函数)上完成的,并将索引存储在doNavigation中。这也正常。

sessionStorage

存储正确的值。因此,当导航回来时,在包含 TileContainer 的页面的doNavigation : function (evt) { if (sessionStorage && this.getView().byId('tilelist')) { sessionStorage.setItem("selected_tile", this.getView().byId('tilelist').indexOfTile(evt.getSource())); } ... } 函数内,我有以下代码。它试图查看 sessionStorage 中是否存在“selected_tile”值,如果是,则调用onAfterRendering传递tile索引。问题是这个代码被执行,但是不起作用,我怀疑这是因为在调用这个函数时,TileContainer的tile聚合返回0长度。

scollIntoView

我的控制台输出看起来像这样(基于点击的图块):

onAfterRendering : function (evt) {
    var theList = this.getView().byId("tilelist");
    if (sessionStorage && theList) {
        var tile_index = sessionStorage.getItem("selected_tile");
        console.log(tile_index + " of " + theList.getTiles().length);
        if (tile_index) {
            theList.scrollIntoView(+tile_index, true);
            sessionStorage.removeItem("selected_tile");
        }
    }
}

任何帮助将不胜感激。我假设还有其他地方我需要执行最后一段代码,因为 TileContainer 此时似乎没有完成处理它的瓦片,至少这是我为什么瓦片的假设聚合为0。

1 个答案:

答案 0 :(得分:0)

您是否在项目中使用路由? 如果是,您可以尝试注册一个方法来处理路由器的routePatternMatched事件。在onAfterRendering方法之后调用此方法 - 如果匹配正确的路由模式。

要实现此目的,只需创建以下内容:

onInit: function() {
    sap.ui.core.UIComponent.getRouterFor(this).getRoute("NameOfYourCurrentRoute").attachPatternMatched(this._routePatternMatched, this); 
},
_routePatternMatched: function(oEvent) {
    //do your stuff here
},

希望此时TileList已准备好导航到正确的磁贴。