PDA

Просмотр полной версии : scope in classes


teka
30.11.2006, 15:10
Салют. Не могу справиться с проблемой.
Есть такой фрагмент:
class miComboBox {
var __Width:Number;
var __Parent:Number;
...
function miComboBox(__parent:Object,...) {
this.__Parent = __parent;
}
}
[iNils: Для оформления своего кода, надо использовать теги ]

Ну и т.п.
Теперь если в какой-либо функции внутри этого класса я создаю обработчик на какой-нить клип/кнопку, допустим, 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
А вот как из обработчика увидеть __Parent, либо обратиться к какой-либо из функций класса?

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

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

}