Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   Доступ из класса в класс (http://www.flasher.ru/forum/showthread.php?t=90800)

Futs 18.01.2007 17:32

Типа за каждый пост не во флейм, пару байтов в мозг

silin 18.01.2007 17:50

смотря для чего оно надо.., а то можно и по-простому ссылками обменяться, не привлекая для этого диспатчер:
Код:

class Class1{
        public function fun1() {
                //бла-бла
        }
        public function fun2() {
                //бла-бла
                Class2.fun3(this)
        }
}
//
class Class2{
        public static function fun3(obj) {
                //бла-бла
                obj.fun1()
        }
}


Futs 22.01.2007 15:34

To __etc спасибо еще раз. Сегодня сел разбираться все получилось, т.е. нужно подписывать ту функцию, которую использую из другого класса. А как можно поступить так же с переменными, чтобы можно было видеть переменные первого класса во втором и если надо менять их. А может разумнее создать класс для переменных и хранить их там. Но тогда не хочется писать VarClass.myVar, может есть какой другой красивый способ?

etc 22.01.2007 15:46

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

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

Futs 22.01.2007 15:57

Но ведь не получается писать жестко var myVarClass2 = Class1.myVarClass1
Он ругается: имя мол конфликтует

etc 22.01.2007 16:08

Не надо путать статические свойства с обычными.
Код:

import mx.events.EventDispatcher;
class AnyClass {
    public var addEventListener:Function;
    public var removeEventListener:Function;
    public var dispatchEvent:Function;
   
    private var otherClass:OtherClass;

    public var anyVariable:Number;

    public function AnyClass(otherClass:OtherClass) {
        EventDispatcher.initialize(this);

        this.anyVariable = 5;
        this.addEventListener("onAnyClassEvent",otherClass);
        otherClass.addEventListener("onOtherClassEvent",this);
        otherClass.anyClass = this;

        this.otherClass = otherClass;
        this.sendMessage();
    }

    private function sendMessage():Void {
        this.dispatchEvent({type:'onAnyClassEvent',data:'test'});
    }

    private function onOtherClassEvent(event:Object):Void {
        trace('Class AnyClass received event from OtherClass data: '+event.data+', anyVariable = '+this.anyVariable);
    }
}

Код:

class OtherClass {
    public var addEventListener:Function;
    public var removeEventListener:Function;
    public var dispatchEvent:Function;

    public var anyClass:AnyClass;

    public function OtherClass() {
        EventDispatcher.initialize(this);
    }

    private function onAnyClassEvent(event:Object):Void {
        trace('Class OtherClass received event from AnyClass data: '+event.data);
        if (this.anyClass) {
            this.anyClass.anyVariable = 10;
        }
        this.dispatchEvent({type:'onOtherClassEvent',data:'hello'});
    }
}


Futs 22.01.2007 16:16

Получается та же история, как и с функциями, да...

Futs 22.01.2007 16:55

Вообще-то он ругается как и раньше, я думал у меня ошибка, но сохранил твой код, тоже самое
Код:

The name of this class, 'OtherClass', conflicts with the name of another class that was loaded, 'OtherClass'.

etc 22.01.2007 16:59

Я же говорю — в событии посылаешь нужное значение параметра и вызываешь событие, которое и будет менять значение.

Ругается? Удали ASO файлы (Control > Delete ASO Files) или перемести проект в другую папку.

Futs 22.01.2007 17:06

Не помогает


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

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