我有一个包含 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。
答案 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已准备好导航到正确的磁贴。