Sapui5 sap.m.TileContainer滚动查看问题
我有一个XML视图,其中包含一个TileContainer,它绑定到一个用于创建StandardTiles的模型。XML代码段是: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}"
<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
},