Sapui5 控制器生命周期:何时调用table.autoResizeColumn()

Sapui5 控制器生命周期:何时调用table.autoResizeColumn(),sapui5,Sapui5,我目前正在使用onAfterRendering()hook自动调整表的布局,如下所示: onAfterRendering: function() { var table = this.getView().byId('table'); for (var i = 0; i < table.getColumns().length; i++) { table.autoResizeColumn(i); } } onAfterRendering:functio

我目前正在使用
onAfterRendering()
hook自动调整表的布局,如下所示:

onAfterRendering: function() {
    var table = this.getView().byId('table');
    for (var i = 0; i < table.getColumns().length; i++) {
        table.autoResizeColumn(i);
    }
}
onAfterRendering:function(){
var table=this.getView().byId('table');
for(var i=0;i
结果不可用:所有列的大小均为父列宽度的100%

如果我添加一个简单的按钮来调用完全相同的逻辑,那么表就会绘制得很好。在
autoResizeColumn()
正常工作之前,似乎需要在DOM中显示完整的表


我的问题:有没有一个合适的钩子/事件可以在表格出现在文档中后调用调整大小功能?

您可以按照建议使用表格的onAfterRendering,并添加一个带有bResized boolean或某种计数器的if语句,以防止无休止的循环。

正如其他人所回答的那样,您可以添加一个函数
oTable.onAfterRendering
但技巧是,如果在该函数中执行任何渲染,它将触发另一个渲染事件,该事件将再次触发onAfterRendering

这里的问题是在何处挂起布尔开关,该开关确定您已经完成了所做的事情

解决这个问题的一种方法是使用
oTable.addCustomData
向表中添加一些客户数据

模式变为:

```


您可以对表本身使用onAfterRendering。这会导致无休止的循环。无休止的循环很明显,因为
autoResizeColumn
函数会触发控件的重新渲染,
onAfterRendering
是再次重新渲染的一部分。我认为您在控制器渲染后调用有点太早了。您可以尝试将resize函数放在一个
窗口中来延迟它。setTimeout(,0)
(或更多毫秒)。如果这对你有帮助,请告诉我。这实际上是我目前的解决方案。我希望找到一个更坚实的一个,而不延迟一些任意时间的调整。
oTable.onAfterRendering = function () {
// check the prototype

// read the custom data
var customData = this.getCustomData(); 

// confirm *your* custom data is in the array (and not some other custom data)

// if not do your rendering operation and then 
// set a switch to custom data
this.addCustomData(new sap.ui.core.CustomData({
    key: "myRenderingCheck",
    value: "true",
    "writeToDom": true
}));