barbitoff programmer`s blog

Здесь я публикую заметки из программерской жизни: грабли, на которые мне случилось наступить, проблемы, для которых было найдено элегантное (или не очень) решение, а также все, с чем мне пришлось столкнуться и чем хотелось бы поделиться =)
PS Если хотите меня поблагодарить - на странице есть 3 места, чтобы это сделать =)

среда, 21 декабря 2011 г.

Особенности работы YAHOO.widget.Paginator.setRowsPerPage()

Метод setRowsPerPage() класса YAHOO.widget.Paginator позволяет динамически устанавливать число элементов на странице. Имеет он два параметра:

  • rpp - новое число элементов на страницу
  • silent - двоичный флаг, значение true которого принудительно предотвращает обновление данных (т.е. генерацию события changeRequest).
Не вполне (имхо) ожидаемое поведение этого метода заключается в следующем (по крайней мере, при использовании пагинатора с виджетом DataTable): пусть, например, текущее значение числа элементов на странице равно 20 и выполняются следующие вызовы:
paginator.setRowsPerPage(50,true);
// ...
paginator.setRowsPerPage(50,false);
Казалось бы, после второго вызове setRowsPerPage с silent=false данные, отображаемые в таблице, должны обновиться в соответствии с новым rpp. Однако нет -  данные остаются прежними. Если на момент выполнения приведенного выше кода отображалась первая страница таблицы, то спасает вызов datatable.render(), однако в случае, если страница была последней, и этот вариант не проходит, а данные, оказавшиеся за пределами отображаемой страницы, становятся недоступными. Можно попереключать страницы (вручную через интерфейс пагинатора или вызовом paginator.setPage), однако если после увеличения числа элементов на странице они все уместились на одной (должны были уместиться), это тоже не вариант (вызов paginator.setPage(1,false) ничего не меняет).

Комментариев нет:

Отправить комментарий