у меня аналогичная ситуация. Однако, если взять пример из приложения (ball_motion_04_click for trial.fla) то след остается. при этом заметил, что в моем проекте в поле "One item in library" виден кружок, в то время как в приложенном примере такого кружка нет. Вопрос знатокам, что не так? |
Flash, ColdFusion и Remoting
Добавление контактов
В следующем параграфе о PMA мы рассмотрим функциональность, заключающуюся в добавлении контактов в базу данных. Кнопка add является компонентом PushButton, который вызывает метод обработки щелчка мыши addConfirm при нажатии кнопки.
Создадим метод addConfirm, который установим в качестве обработчика щелчка. При нажатии кнопки должно отображаться сообщение, инструктирующее пользователя о том, как добавить новый контакт. После этого можно либо продолжить работу, либо выбрать отмену и вернуться в PMA.
- Начнем с отображения фильма сообщения, установив параметр видимости компонента MessageBox на значение 1, т.к. по умолчанию в фильме этот параметр отключен. Также установим размер и сообщение фильма, как показано ниже.
function addConfirm( { message_mc._visible = 1; message_mc.setSize(200, 150); message_mc.setMessage("Please fill out the form and click К\"save\" tc add the new contact");
- Далее устанавливаем кнопки и их ширину в MessageBox с помощью массива кнопок для хранения имен PushButtons в MessageBox. Затем вызываем методы setButtons и setButtonWidth для динамического добавления и установки размера кнопок.
var buttons = ["Okay", "Cancel"]; message_mc.setButtons(buttons); message_mc.setButtonWidth(60);
- Наконец, определяем метод закрытия обработчика.
message_mc.setCloseHandler ("addContact"); }
Затем здесь устанавливаются некоторые параметры (такие как размер окна) и сообщение. Возможность динамической настройки этих параметров очень полезна, равно как и то, что можно использовать компонент MessageBox для других сообщений подтверждения в любом месте приложения. Последняя строка вышеуказанного кода устанавливает метод закрытия обработчика MessageBox, вызываемого каждый раз при закрытии окна. Очевидно, нам не требуется, чтобы что-либо происходило после нажатия кнопки cancel , поэтому нужно соответствующим образом дополнить метод addContact.
- При нажатии кнопки OK нужно очистить поля формы и включить кнопку save, чтобы пользователь мог добавить информацию о новом контакте.
function addContact(component, buttonlndex) { if (buttonlndex == 0) { first_name = ""; last_name = ""; address = ""; city = ""; state = ""; zip = ""; email = ""; phone = ""; notes.text = ""; save_mc.setEnabled(true); } }
Так как кнопка OK имеет в массиве индекс 0, определяем, была ли она нажата, и очищаем поля формы перед тем, как сделать доступной кнопку save. Если она не была нажата, ничего не происходит, и пользователь возвращается в PMA.
- Теперь поля ввода очищены, и кнопка save доступна, поэтому пользователь может создавать новую запись. Он должен заполнить все поля, и здесь мы используем простой метод проверки того, что заполнены именно все поля.
function validateFields() { if (first_name != '' && last_name != '' && address != '' && Кcity != '' && state != '' && zip != '' && email != '' && Кphone ! ='' && notes. text != '' && calendar_mc.getSelectedItem()) { return true; } }
Этот метод проверяет существование данных в полях, а также выбор даты создания контакта. Разумеется, проверка может быть изощреннее, однако для наших целей и такая вполне годится. Если вы хотите сделать приложение функциональнее, смело расширяйте возможности этого метода и создайте схему проверки, удовлетворяющую вашим нуждам. Метод validateFields возвращает значение true, если форма успешно проходит проверку.
- Теперь можно использовать этот метод совместно с методом saveContact, который будет вызываться при щелчке пользователем на кнопке save для сохранения новой контактной информации в базе данных.
function saveContact() { if(validateFields()) {
- Так как в нашем случае пользователь заполнил все поля, создайте объект нового контакта для передачи в CF.
var o = new Object(); o.first_name = first_name; o.last_name = last_name; o.address = address; o.city = city; o.state = state; o.zip = zip; o.email = email o.phone = phone; o.notes = notes.text; o.birth_date = birth_date;
- Каждый раз при выборе даты в календаре, мы вызываем обработчик изменений getBirthDate, который устанавливает переменную birth_date. Отправьте его в saveContact CFC через шлюз Flash.
contacts_service.saveContact(o); } else {
- Если пользователь не заполнил все поля, он будет оповещен об этом с помощью того же окна сообщения, что использовалось нами ранее. Это делается так же, как и в функции addConfirm.
message_mc._visible = 1; // set the size and message of the clip message_mc.setSize(200, 150); message_mc.setMessage ("Please be sure to fill out all fields."); // set the buttons and their width in the MessageBox var buttons = ["Okay"]; message_mc.setButtons(buttons); message_mc.setButtonWidth(60);
- Теперь нужно просто сбросить метод закрытия обработчика, если он был установлен.
message_mc.setCloseHandler(null); } }
- Перейдем обратно в текстовый редактор, в котором введены функции ColdFusion, и создадим модуль CFC, ответственный за захват информации из объекта и добавление ее в базу данных, который мы только что вызывали в функции saveContact. Введите следующий код.
<!--- save contact info ---> <cffunction name="saveContact" access="remote"> <cfquery datasource="#request.dsn#" name="add_contact"> insert into contacts(first_name, last_name, address, city, state, Кzip, email, phone, notes, birth_date) values('#flash.first_name#', '#flash.last_name#', К'#flash.address#', '#flash.city#', '#flash.stateft', '#flash.zip#', '#flash.email#', К#flash.phone#', '#flash.notes#', #createodbcdate (flash.birth_date)#); </cfquery> <cfreturn 1 /> </cffunction>
Если вы уже хорошо знакомы с CF и областями применения переменных, то обрадуетесь, узнав, что области применения переменных Flash существуют и в ColdFusion MX. Доступ к данным, переданным из Flash, можно осуществлять так: flash.имя_переменной. Это способ доступа к данным, переданным из Flash, а также их включения в выражение insert. После успешного выполнения insert, возвращаем флажок успешного завершения во Flash. Этот флажок имеет значение 1 и будет передан обратно методу saveContact_Result.
- Этот метод будет выводить сообщение об успешном окончании операции, если вставка была успешной. Он проверяет, была ли вставка успешной, и если это так, выводит сообщение об успешном окончании операции. Добавьте следующий код к уже имеющимся действиям в фильме Flash.
function saveContact_Result(success) { if(success) { message_mc._visible = 1; message_mc.setSize(200, 150); message_mc.setMessage("The new contact was added successfully."); // set the buttons and their width in the MessageBox var buttons = ["Okay"]; message_mc.setButtons(buttons); message_mc.setButtonWidth(60); // reset the close handler method in case it was already // set message_mc.setCloseHandler(null);
- После этого вызывается начальный метод getAllContacts, который обновит список ListBox нашим новым контактом.
contacts_service.getAllContacts(); } }