Форум 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)
-   -   scope in classes (http://www.flasher.ru/forum/showthread.php?t=88778)

teka 30.11.2006 15:10

scope in classes
 
Салют. Не могу справиться с проблемой.
Есть такой фрагмент:
Код:

class miComboBox {
        var __Width:Number;
        var __Parent:Number;
        ...
        function miComboBox(__parent:Object,...) {
                this.__Parent = __parent;
        }
}

[iNils: Для оформления своего кода, надо использовать теги [code][/code]]

Ну и т.п.
Теперь если в какой-либо функции внутри этого класса я создаю обработчик на какой-нить клип/кнопку, допустим, onRelease, то у меня this внутри обработчика начинает ссылаться на этот самый родительский клип/кнопку. А вот как из обработчика увидеть __Parent, либо обратиться к какой-либо из функций класса?

teka 30.11.2006 15:36

Нет, ну конечно можно перед вызовом обработчика сохранять значение this в клипе, например, так: myMc.parent = this; .
Но просто интересно, может кто-то более элегантное решение знает?

etc 30.11.2006 15:52

1) Имена классов должны начинаться с большой буквы
2) Тип свойства указан как Number, а в конструкторе ты присваиваешь Object

Проще использовать Delegate/Proxy для перенаправления вызова метода в метод класса. Где-то в соседних темах есть и примеры Delegate (можно пользовать родной mx.utils.Delegate), и Proxy.

teka 30.11.2006 16:45

странно.
 
странно. разве delegate не к компонентам применяется? а у меня ведь просто movieClip. Proxy тоже не годится. Юзаю пока восьмерку (или опять не прав и под восьмеркой тоже есть flash.utils.Proxy?)

etc 30.11.2006 19:52

Proxy подразумевался ascb.util.Proxy, я где-то приводил его код. Есть на person13.com…
В делегат можно юзать и в своих целях.

Бармалей 30.11.2006 22:35

Цитата:

Сообщение от teka
А вот как из обработчика увидеть __Parent, либо обратиться к какой-либо из функций класса?

Если обработчики клипов присваиваются в конструкторе или одном из методов текущего класса, можно воспользоваться локальной ссылкой на текущий объект:

Код:

public function miComboBox(){
        // Сохраняем ссылку на текущий объект.
        this_tmp:miComboBox = this;
        // Присавиваем обработчик клипу.
        my_mc.onPress = function(){
                // Спокойно обращаемся к свойству нашего объекта.
                this_tmp.__Parent = 100;
        };
       
}



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

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