PDA

Просмотр полной версии : AddEventListner()


Icida
28.06.2007, 01:30
Тема скорее всего уже поднималась, но чет поиск мне особо не помог. Буду очень благодарна, если вы мне объясните, в чем разница между
mc.addEventListener('click') и mc.onClick. Первый вариант, насколько я знаю, функциональнее. И еще очень хотелось бы разобраться с этим addEventListener(). Очень хочется почитать что-нибудь на эту тему.

У меня вот возникла такая проблема. Есть класс, в нем описывается поведение некоторых объектов на сцене. В этом классе я хочу присвоить обработчик события мувиклипу, но так,чтобы в функции обработчика события были доступны переменные класса. Т.е. например есть такой код:



class Test(){

var name;

function Test(){
this.name = 'my name';
_root.mc.mc_button.onRelease = this.myFunc;

}


function myFunc(){
trace(this.name)
}
}


Так вот: в функции myFunc я получаю значение undefined т.к. она является методом объекта mc_button а не объекта класса Test. А мне нужно как раз наоборот :) А еще мне кажется, что я делаю все как-то уж слишком криво, была бы очень рада, если бы вы подкинули мне какие-нибудь приемы правильной работы с классами и слушателями событий. Вообще, про классы я перерыла немало литературы, но вот, как мне кажется, еще как-то не дошла до правильного их использования...
Заранее спасибо.

etc
28.06.2007, 05:43
Для изменения области видимости в «нужную сторону» используется Delegate.
addEventListener — метод, который есть у элементов, проинициализированных EventDispatcher.

Icida
01.07.2007, 16:55
Что-то совсем плохо. Перерыла кучу доков по addEventListner(). Чет никак у меня не работает в результате закрыла текущий проект, сделала новый. Положила на сцену кнопку и в первый кадр сцены написала код

myListener = new Object();
myListener.click = function(evt){
trace(evt.type + " triggered");
}
_root.myButton.addEventListener("click", myListener);


Использую FLASH 8. Что я делаю не так?

etc
01.07.2007, 17:30
1) Кнопка должна быть компонентом (стандартным):
2) У неё должно быть Instance Name равное myButton.

Icida
01.07.2007, 18:39
instance Name есть. А к своим компонентам нельзя это применять? А если я создам свой мувиклип то к нему вообще нельзя addEventListener применять?

etc
01.07.2007, 18:42
А это уже нужно рыть в сторону документации EventDispatcher.

wvxvw
01.07.2007, 21:05
import mx.events.EventDispatcher;
//
[Event("onMyEvent")]
class Test extends MovieClip {
var __mc:MovieClip;
function Test(){
__mc = rect(this, 100, 100, 0, 70);
EventDispatcher.initialize(__mc);
__mc["addEventListener"]("onMyEvent", this);
__mc.onRelease = function(){
this["dispatchEvent"]({type:"onMyEvent"});
}
}
function onMyEvent(){
trace("native");
}
private function rect(_mc:MovieClip, w:Number, h:Number, c:Number, a:Number):MovieClip {
var mc:MovieClip = _mc.createEmptyMovieClip("child"+_mc.getNextHighestDepth(), _mc.getNextHighestDepth());
mc.beginFill(c, a);
mc.moveTo(0, 0);
mc.lineTo(w, 0);
mc.lineTo(w, h);
mc.lineTo(0, h);
mc.lineTo(0, 0);
mc.endFill();
return mc;
}
}

comp.onMyEvent = function(){
trace("me bein overrided!");
}
Но, если честно, то это полный бред и никому не нужно, теоретически не может быть ситуации в которой call и apply не справятся.