2014-01-04 3 views
2

ВАЖНО :: Эта проблема полностью отличается от другой проблемы similarly titled о переполнении стека.Высота CellTable сжимается при подкачке

У меня есть CellTable, прекрасно работающий в сочетании с поддерживающим RPC AsyncDataProvider в GWT 2.5.1. RPC очень быстро реагирует, приходя в течение менее 20 миллисекунд.

Проблема, с которой я сталкиваюсь, заключается в том, что, когда я просматриваю таблицу, у меня, кажется, есть мерцание, которое встречается на столе в браузере. После некоторой отладки я вижу, что таблица не отображает строки данных, а затем в течение нескольких миллисекунд восстанавливает строки следующей страницы.

Это проявляется в виде следующих быстрых последовательностей событий пользовательского интерфейса каждый раз, когда я переместить страницу (где 10 является произвольным размером страницы):

  1. Отображения текущей страницы (10 записей)
  2. Отображения пустой страницы (0 записей)
  3. Отображение следующей страницы (10 записей)

Чтобы изолировать, если проблема была с обработчиками событий от соответствующего пейджера виджета, я добавил кнопку (чисто для теста целях) вручную изменить страницу в таблице. Следующая кнопка имеет те же самые симптомы, что и пейджинг, нажав на виджет пейджера.

_movePageForwardButton.addClickHandler(new ClickHandler() { 
     @Override 
     public void onClick(ClickEvent event) { 
      _table.setPageStart(_table.getPageStart()+10); 
     } 
    }); 

Я уже выполнил поиск Google и нашел this post (из которого я позаимствовал название этого вопроса), который описывает те же симптомы, как я в настоящее время переживает. Никакое решение не предлагается, и я должен предположить, что другие столкнулись с одной проблемой и разработали свои собственные методы обхода. Обходной путь будет очень любезно принят.

+0

вы первый очистное данные, а затем извлечение другой один? – dhamibirendra

+0

Нет, я совсем не очищаю данные. Стол делает это сам по себе. – Chris

ответ

3

У меня была та же проблема. Решение было установить ROWDATA немедленно (в некоторых временных значений), перед вашим началом обработки асинхронной, так и в то же время ваш CellList есть что-то он может отображать:

dataProvider = new AsyncDataProvider<StringEntity>() { 

    @Override 
    protected void onRangeChanged(final HasData<StringEntity> display) { 
    final Range visibleRange = display.getVisibleRange(); 
    final int start = visibleRange.getStart(); 
    final int length = visibleRange.getLength(); 

    final List<StringEntity> subList = new ArrayList<StringEntity>(); 
    for (long position = start; position < start + length; position ++) 
     subList.add(new StringEntity(position, "Please wait...")); 

    display.setRowData(start, subList); 

    // now perform your request... 
    // onSuccess, set the rowData again (to the updated values) 
    } 
} 
+0

Работал в первый раз (хотя я использовал кэшированное содержимое предыдущего содержимого страницы (List в вашем примере) в качестве временного содержимого для переключения. Это вызывает небольшое обновление мерцания на пейджере при прокрутке на самую последнюю страницу (например, когда появляются асинхронные результаты, может быть меньше записей, чем размер страницы), но это почти не заметно и намного лучше, чем предыдущая ситуация. – Chris

Смежные вопросы