Казахстан, Алматы, Гимназия им. Ахмета Байтурсынова №139, 2008 |
Работа флэш-программ в Internet
Рекомендуемый способ загрузки переменных
Только что мы говорили о возможности загружать с сервера или из файлов переменные. Например, вы можете сделать ini-файл и задавать в нем, размер шрифта или язык. Правда, чтобы отследить, что загрузка переменных закончилась, нам пришлось использовать событие onData класса MovieClip (и, напомним, клип должен был быть встроен в общее дерево клипов). Но нет ли какого-нибудь способа загрузить переменные в какой-нибудь "легкий" объект, который мы просто создаем при помощи new и больше ни о чем не заботимся? Оказывается, такой способ есть.
Начиная с Flash версии 6 существует объект LoadVars, который позволяет загрузить переменные, используя, URL (опять же, это может быть относительный путь к лежащему "рядом" файлу или HTTP-запрос). Заодно этот объект позволяет более удобным способом отследить, что загрузка переменных произошла.
Простейшая схема использования LoadVars такая:
- создать объект LoadVars ;
- определить и записать в поле onLoad созданного вами объекта callback -функцию, вызываемую после окончания загрузки переменных ; все переменные будут доступны как поля объекта LoadVars, то есть через ссылку this ;
- вызвать метод load объекту LoadVars для инициирования загрузки переменных.
Приведем пример использования LoadVars, в котором из файла " settings.ini " загружаются имя шрифта и текущий используемый язык.
var myLoadVars = new LoadVars(); //создаем объект LoadVars myLoadVars.onLoad = function () { //определяем callback-метод globalStyleFormat.face = this.font; //устанавливаем шрифт globalStyleFormat.applyChanges(); _global.localizer.setLocale (this.language); //устанавливаем язык // предполагается, что объект localizer вы уже описали // где-то в другом месте } myLoadVars.load("settings.ini");
В этом примере мы использовали метод load. Это значит, что никакие переменные на сервер не посылались. В том случае, когда их посылать не нужно, этот метод (имеющий всего один аргумент - URL, откуда загружаются переменные ) и впрямь является оптимальным. Если же надо послать переменные на сервер, используйте метод sendAndLoad. Этот метод имеет следующий синтаксис:
<LoadVars>.sendAndLoad(url, targetObject [,method]);
Здесь targetObject - это ссылка на объект типа LoadVars, в который следует загрузить переменные. На сервер же будут посланы, как обычно, переменные того объекта, для которого вызвана функция. Еще раз обратим ваше внимание, что targetObject - обычная ссылка, а не строковый путь (который все равно работает только для клипов). Все-таки LoadVars - это довольно современный способ работы с переменными, он появился (в отличие от старых глобальных функций loadVariables и пр.) только во Флэш МХ. Наконец, третий аргумент, как обычно, описывает метод, которым следует слать переменные. Если метод не указывать, то переменные все равно посылаются - ведь мы явным образом скомандовали их слать. А вот метод посылки переменных по умолчанию - это, как ни странно, POST. Впрочем, правило "оптимизации метода" работает и здесь: если в объекте нет ни одной переменной, которую можно было бы послать, то на сервер уходит запрос типа GET.
Наконец, в классе LoadVars есть еще метод, который аналогичен функции getURL. Это метод send. Вот его описание:
<LoadVars>.send(url, target [, method]);
Здесь, в отличие от метода sendAndLoad, второй аргумент target - это не ссылка, а строка, и значение этого аргумента совсем другое. Данная строка представляет собой имя окна или фрейма браузера, в который нужно загрузить веб-страницу (или информацию другого типа), которую пришлет сервер. Если это имя неизвестно серверу, он открывает новое окно (можно также использовать предопределенные имена _self, _top, _parent и _blank, описанные в параграфе, посвященном функции getURL ). Несмотря на то, что написано в онлайн-документации Флэш МХ, данный аргумент не является необязательным. Если его опустить (или заменить на null ), сервер вовсе не получает запроса, хотя сам метод send и возвращает при этом true.
Третий аргумент, как обычно, - это метод посылки переменных. Методом по умолчанию является POST, но правило "оптимизации метода" действует и здесь - если нечего слать, то будет применен метод GET.
Интересно, что данный метод, как и функция getURL, имеет забавную особенность: при тестировании во встроенном в интегрированную среду Флэш МХ флэш-плеере, запрос всегда посылается методом GET, какой бы метод мы ни указали. Но из браузера все работает правильно.
И, кстати, обратим внимание на то, что в отличие от рассмотренных ранее методов, которые что-либо шлют на сервер или получают с него, методы LoadVars возвращают булевский результат вызова. Этот результат может быть равен false например в том случае, когда аргумент targetObject метода sendAndLoad не указывает на объект типа LoadVars (тогда и на сервер ничего не посылается).