Мир объектов Excel 2000


Код, исполняемый на стороне клиента


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

Программирование на клиентской стороне в большей степени является программированием, управляемым событиями. Это и понятно - здесь расположены элементы управления, с которыми работает пользователь, а именно он, его действия при работе с документом являются источником возникновения событий. Поэтому основу декларативной части клиентского кода составляют, как правило, процедуры-обработчики событий, возникающих с интерфейсными объектами и другими объектами, расположенными на странице. По этой причине нет необходимости в исполняемом фрагменте кода, хотя он и может присутствовать. Но более естественно для данного стиля программирования для инициирования вычислений иметь процедуру, обрабатывающую событие Load, которая автоматически будет вызываться при открытии страницы. Когда же пользователь начнет работать, то будут вызываться и другие обработчики событий. А теперь взгляните на декларативный код клиентской части нашей страницы. Конечно же, он включает процедуры-обработчики различных событий, возни

m° кающих с объектами страницы. Вот этот код:

<SCRIPT LANGUAGE=vbscript>

<!-- '********************************************************** '** Объявления глобальных переменных, процедур и функций ** '************ на стороне клиента ************************** Sub Window_onLoad() 'Обработчик события Load - вызывается при открытии страницы 'Заполняем скрытые поля формы - автор и название книги FromSelectToHiddenFields End Sub 'Window_onLoad


Sub SelectBook_onChange 'Обработчик события Change - вызывается при выборе книги 'в списке SelectBook 'Заполняем скрытые поля формы - автор и название книги FromSelectToHiddenFields End Sub 'SelectBook_onChange

Sub btnLookmyQ_onClick 'Обработчик события Click - вызывается при нажатии 'командной кнопки "Посмотреть мои вопросы и ответы на них" 'Вызов страницы qomFromBase с показом вопросов и ответов CallNextPage("LookmyQ") End Sub 'btnLookmyQ

Sub btnLookAllQ_onClick 'Обработчик события Click - вызывается при нажатии 'командной кнопки "Посмотреть все вопросы и ответы на них" 'Вызов страницы qomFromBase с показом всех вопросов и ответов CallNextPage("LookAllQ") End Sub 'btnLookAllQ

Sub btnLookOM_onClick 'Обработчик события Click - вызывается при нажатии 'командной кнопки "Посмотреть отзывы и оценки" 'Вызов страницы qomFromBase с показом отзывов и оценок CallNextPage("LookOM") End Sub 'btnLookOM

Sub FromSelectToHiddenFields() 'Передача данных от выбранного элемента списка книг 'к скрытым полям формы Dim str1,str2,str3 'строковые переменные Dim Ind1 'индекс вхождения 'Разбор строки с названием книги и фамилией автора str1=SelectBook.Value Ind1= InStr(str1,":")-1 str2= Left(str1,Ind1) str3 = Mid(str1,Ind1+2) 'Запись данных в поля формы frmMain.Author.value = str2 frmMain.Title.value = str3 'MsgBox(frmMain.Author.value & frmMain.Title.value) End Sub 'FromSelectToHiddenFields

Sub CallNextPage(NameOfButton) 'NameOfButton - Имя нажатой кнопки 'Вызов страницы qomFromBase с передачей параметров: 'имени нажатой кнопки, названия и автора книги Dim str1, str2 'строковые пременные str1=frmMain.Author.value str2=frmMain.Title.value Window.navigate "qomFromBase.asp" & _ "?btnName=" & NameOfButton & "&Author=" & str1 & "&Title=" & str2 End Sub 'CallNextPage --> </SCRIPT>

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

Когда на клиентской стороне открывается страница, возникает событие Load объекта Window и вызывается соответствующая процедура. Действие ее достаточно просто - она обращается к процедуре FromSelectToHiddenFields, которая значение элемента SelectBook преобразует в название книги и фамилию автора и заполняет этими данными скрытые поля формы.

Эта же процедура вызывается и в обработчике события Change объекта SelectBook. Само же событие возникает тогда, когда пользователь выберет новую книгу из списка. Понятно, что в этот момент следует и обновить значения полей формы.

Комментировать работу процедуры FromSelectToHiddenFields вряд ли имеет смысл - обычная работа с объектами и строковыми переменными.

Следующие три процедуры в этом тексте - это обработчики события Click для трех объектов, задающих разные командные кнопки. Напомню, что ожидаемое действие при нажатии этих кнопок аналогично действию при нажатии кнопки Submit - должна быть вызвана некоторая страница узла и этой странице должны быть переданы параметры, необходимые для выполнения на сервере запрашиваемого действия. Все три обработчика устроены одинаково - вызывают процедуру CallNextPage, передавая ей в качестве параметра имя нажатой кнопки.

Процедура CallNextPage обеспечивает связь с сервером. Вызов метода Navigate объекта Window позволяет достаточно просто решить требуемую задачу. Метод позволяет задать вызываемую страницу сервера и передать ей параметры. Заметьте, вызывается страница qomFromBase, которая предназначена для того, чтобы по запросу пользователя читать данные из базы данных и отображать их в нужном виде на клиентском компьютере. Три параметра передаются этой странице - имя нажатой командной кнопки, фамилия автора и название книги. Первый параметр определяет, по сути, запрос пользователя - хочет ли он просмотреть по выбранной им книге ответы на его вопросы, все вопросы и ответы или все отзывы и оценки.

Вот и весь программный код, обеспечивающий интерактивность нашей странице. Я рассмотрел создание интерфейса страницы и создание кода, поддерживающего этот интерфейс. На этом я заканчиваю рассмотрение вопросов создания основной страницы нашего узла. Думаю, что она является достаточно типичным примером интерактивной Web-страницы - примером страницы, в которой пользователь запрашивает необходимую ему информацию. Чтобы пример был законченным, нужно еще рассмотреть, как устроены страницы qomToBase и qomFromBase, организующие реакцию на запросы пользователя. Но прежде, чем перейти к их рассмотрению, хочу сказать несколько слов о том, как я придаю структуру программному коду.


Содержание раздела