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
}));