Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   Flex (http://www.flasher.ru/forum/forumdisplay.php?f=84)
-   -   Как изменить значение текстового поля (mxml-файл) из класса (as-файл) по событию? (http://www.flasher.ru/forum/showthread.php?t=115395)

Serg_Mars 28.08.2008 16:35

Как изменить значение текстового поля (mxml-файл) из класса (as-файл) по событию?
 
Доброго времени суток, друзья.

Только начал разбираться с флэшем, поэтому, пожалуйста отнеситесь с пониманием и не бейте больно )

Помогите разобраться в ситуации.

У меня есть класс, созданный в отдельном файле as. Внутри этого класса создаётся таймер, срабатывание которого я отлавливаю.

Есть также интерфейс, задизайненный в mxml-файле.

Я хочу по таймеру объекта вышеобозначенного класса изменять значение текстового поля на интерфейсе.

Проблема в том, что я не знаю, каким образом из as-файла обратиться к конкретному элементу интерфейса. Я могу передать его в конструктор класса
var QGE:QGEng = new QGEng(log); log - это TextArea
но не могу передать в обработчик события timer.addEventListener(TimerEvent.TIMER, onTimer);

вот если бы можно было в вызов onTimer передать параметры, то было бы супер. Но как я понимаю этого сделать нельзя. Или можно каким-то способом, которого я не знаю.

Помогите разобраться, пожалуйста.

fljot 28.08.2008 17:05

таймер у вас в классе QGEng? тогда в конструкторе запишите ссылку на log в свойство класса, в обработчике onTimer() тогда будет доступ к log.

или лучше таймером дистапчить событие, а которое будет подписан ваш mxml компонент. таким образом их связь не такая неразрывная получится. вдруг по таймеру не только одно поле надо будет изменять, да?

Serg_Mars 28.08.2008 18:31

а каким образом передавать log по ссылке?

если я присваиваю свойству класса log вот таким образом:

txt:TextArea = log, txt - свойство класса QGEng.

а потом пытаюсь изменить txt.text,

то он ругается Error #1009: Cannot access a property or method of a null object reference.

А как подписать mxml компонент в событие таймера?

fljot 28.08.2008 18:58

Цитата:

Сообщение от Serg_Mars (Сообщение 760847)
а каким образом передавать log по ссылке?

если я присваиваю свойству класса log вот таким образом:

txt:TextArea = log, txt - свойство класса QGEng.

а потом пытаюсь изменить txt.text,

то он ругается Error #1009: Cannot access a property or method of a null object reference.

проверьте, что у вас в txt после присваивания

Цитата:

Сообщение от Serg_Mars (Сообщение 760847)
А как подписать mxml компонент в событие таймера?

да также как и чистом as3. создаёте экземпляр QGEng и подписываетесь на его событие (это событие должен диспатчить QGEng внутри метода QGEng.onTimer() )

CrazyFlasher 28.08.2008 20:29

не надо ничего передавать...читайте про data binding
[Bindable] а также про singleton

Molecula 29.08.2008 02:19

Да, можно через Бинд делать:
Основное:
Код:

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" creationComplete="init()">
        <mx:Script>
                <![CDATA[
                        import mx.binding.utils.ChangeWatcher;
                    import mx.binding.utils.BindingUtils;
               
                        private var co:Core;
                        private var __nameWatcher:ChangeWatcher;
                       
                        private function init():void{
                                this.co = new Core();
                                this.addChild(this.co);
                                this.__nameWatcher = BindingUtils.bindProperty(ta, "text", this.co, "s");
                                ta.text = 'Hello Budda!';
                        }
                        private function onClick(e:MouseEvent):void{
                                this.co.pizdun();
                        }
                ]]>
        </mx:Script>
        <mx:TextArea id="ta" x="44" y="56"/>
        <mx:Button x="44" y="118" label="Button" click="onClick(event)"/>
</mx:Application>

AS:
Код:

package{
        import mx.core.UIComponent;
           
        public class Core extends UIComponent{
               
                [Bindable] public var s:String;
               
                public function Core(){
                        super();
                }
                public function pizdun():void{
                        s = 'Hi';
                }
        }
}


Serg_Mars 29.08.2008 11:51

спасибо за советы.

заработало при помощи связывания свойств классов.

про singleton начал читать, почти сломал себе мозг и решил оставить на потом :)

Molecula 29.08.2008 14:30

А синглтон зачем, есть же BindingUtils.

Serg_Mars 29.08.2008 14:35

CrazyFlasher советовал почитать про него.

Но, насколько я понял, синглон это не про то, что мне надо.

CrazyFlasher 29.08.2008 15:33

singleton это на будущее...полезная вещь...здесь достаточно ознакомится с data binding


Часовой пояс GMT +4, время: 23:30.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.