Оптимальное изменение видимости элементов на управляемой форме

15 февраля 2014

Флаг "Видимость"

В предыдущей статье была описана причина, по которой изменение видимости элементов на управляемой форме не является хорошим способом перестроения интерфейса, управлением доступности элементов формы для пользователей.

Исходная управляемая форма списка

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

Все на клиенте

Вся суть описанного ниже способа заключается в изменении видимости / доступности элемента формы только на клиентской стороне, без обращений к серверу. Флаг "Видимость" нам не подойдет. Обратимся к другим возможностям.

Есть два варианта. Первый - использовать свойство элемента формы "Доступность". Но тогда, хоть пользователь и не сможет работать с элементом формы, для которого доступность установлена в ЛОЖЬ, видеть он его все же будет. Вот так выглядит обработчик изменения доступности элемента формы:

&НаКлиенте
Процедура СкрытьКомандуВидимость(Команда)
 
 Элементы.Предупредить.Доступность = 
             НЕ Элементы.Предупредить.Доступность;
 
КонецПроцедуры
Недоступны элемент принимает следующий вид:
Недоступный элемент на управляемой форме

При изменении доступности элемента обращений к серверу для перерисовки формы, как это было с флагом "Видимость", не происходит.Структура элементов формы

Но что, если нам нужно полностью скрыть элемент формы из вида? Продемонстрируем как это сделать на элементе динамического списка представленной выше формы. Добавим на форму группу элементов с видом "Страницы" и две подчиненных группы с видом "Страница". Элемент динамического списка перенесем в одну из них.

На пустую страницу, где нет динамического списка, добавим декорацию вида "Надпись", чтобы страница была не пустой и на нее можно было переключаться. У группы страниц свойство "Отображение страниц" установим в ЛОЖЬ, чтобы закладки были не видны.

Теперь в команде "Скрыть динамический список" напишем следующий обработчик:

&НаКлиенте
Процедура СкрытьКомандуВидимость(Команда)
 
 Если Элементы.Страницы.ТекущаяСтраница 
                       = Элементы.Страница1 Тогда
      Элементы.Страницы.ТекущаяСтраница 
                               = Элементы.Страница2; 
 Иначе
             Элементы.Страницы.ТекущаяСтраница 
                               = Элементы.Страница1;
 КонецЕсли;
 
КонецПроцедуры
Команда переключает страницы. При переключении страниц обращений к серверу не происходит, все выполняется на стороне клиента. При этом если мы переключимся на страницу "Страница2", где был добавлена лишь декорация надписи, то форма будет выглядеть как на скриншоте ниже:
Результат изменения страницы на форме

Таким образом, мы скрыли элемент управляемой формы оптимальным образом без обращений к серверу, контекстных вызовов сервера. Следовательно, сэкономили объем передаваемого трафика и ускорили работу программы.

Проектируя интерфейс на управляемых формах, особенно если решение будет работать в режиме тонкого клиента, всегда необходимо учитывать поведение платформы при тех или иных действия. Так, например, выше уже было сказано, что при изменении видимости элементов выполняется полная перерисовка формы на сервере, а при изменении свойства "Доступность" или переключении страниц - все действия выполняются на клиентской стороне.

Используйте возможности управляемых форм правильно!


comments powered by Disqus