Sapui5 sap.m.TileContainer滚动查看问题

Sapui5 sap.m.TileContainer滚动查看问题,sapui5,Sapui5,我有一个XML视图,其中包含一个TileContainer,它绑定到一个用于创建StandardTiles的模型。XML代码段是: <TileContainer id="tilelist" tiles="{Applications}"> <tiles> <StandardTile name="{ID}" icon="{Icon}" title="{Name}" press="doNavigation" info="{Description}"

我有一个XML视图,其中包含一个TileContainer,它绑定到一个用于创建StandardTiles的模型。XML代码段是:

<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>
存储正确的值。因此,在返回时,在包含TileContainer的页面的
onAfterRendering
函数中,我有以下代码。它试图查看sessionStorage中是否存储了“selected_tile”值,如果是,则调用
scollIntoView
传入tile索引。问题是,此代码已执行,但不起作用,我怀疑这是因为在调用此函数时,TileContainer的tiles聚合返回0长度

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的原因的假设。

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

要实现这一点,只需创建以下内容:

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

希望tile列表此时已准备好导航到正确的tile。

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

要实现这一点,只需创建以下内容:

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

希望tile列表此时已准备好导航到正确的tile。

IMO,更好的方法是检索
应用程序
属性的
长度
(JSONModel)或
$count
(ODATAModel),并使用该属性。不幸的是,尽管这可能会给出数据的大小,但它并没有给出TileContainer认为的在我尝试调用scrollIntoView时的tile数量。如果这个数字是0,它肯定不能滚动到tile X,因为它还没有该tile。我怀疑除了页面的onAfterRending功能之外,还有其他地方需要执行此代码,我只是不知道在哪里。在我看来,更好的方法是检索
应用程序
属性的
长度
(JSONModel)或
$count
(ODATAModel),并使用该属性。不幸的是,尽管这可能会给出数据的大小,但它并没有给出TileContainer认为的在我尝试调用scrollIntoView时的tile数量。如果这个数字是0,它肯定不能滚动到tile X,因为它还没有该tile。我怀疑除了页面的onAfterRending函数之外,还有其他地方需要执行此代码,我只是不知道在哪里。
onInit: function() {
    sap.ui.core.UIComponent.getRouterFor(this).getRoute("NameOfYourCurrentRoute").attachPatternMatched(this._routePatternMatched, this); 
},
_routePatternMatched: function(oEvent) {
    //do your stuff here
},