我正在使用GWT的CellTable。当用户单击某个列标题进行排序时,我想禁用排序,直到检索到数据。为此,我使用以下代码:
private void setHeadersSortable(boolean enable) {
if (_table.getColumnCount() > 0) {
if (enable) {
// enable only columns specified in _sortPropertyByColumn
Iterator<Column<T, ?>> sortableColsIter = _sortPropertyByColumn.keySet().iterator();
while (sortableColsIter.hasNext()) {
sortableColsIter.next().setSortable(enable);
}
} else {
// disable all columns
for (int i = 0; i < _table.getColumnCount(); i++) {
_table.getColumn(i).setSortable(enable);
}
}
_table.redrawHeaders();
}
}
这一切在Firefox和IE中运行良好,但在Chrome中没有。
似乎在Chrome中,它在_table.redrawHeaders()中失败了。调用在gwt类AbstractHasData中调用失败,抛出IndexOutOfBoundsException
protected void checkRowBounds(int row) {
if (!isRowWithinBounds(row)) {
throw new IndexOutOfBoundsException("Row index: " + row + ", Row size: " + getRowCount());
}
}
protected boolean isRowWithinBounds(int row) {
return row >= 0 && row < presenter.getVisibleItemCount();
}
答案 0 :(得分:0)
通过推迟redrawHeaders()调用
解决了该问题Scheduler.get().scheduleDeferred(new ScheduledCommand() {
@Override
public void execute() {
_table.redrawHeaders();
}
});
}