Как получить событие для закрытия или удаления экземпляра во Flash AS3 - PullRequest
0 голосов
/ 05 декабря 2009
package com.test{
    import flash.display.Sprite;
    import flash.display.MovieClip;
    import com.greensock.*;
    import com.greensock.easing.*;
    import com.test.CreateRoundRectButton;
    import flash.events.*;
    import flash.net.*;

    public class DetailView extends MovieClip {
        private var detailPanel:MovieClip=new MovieClip();
        private var detailData:Object;
        private var closeBtn:Sprite;
        private var DetailForm:DetailViewForm=new DetailViewForm();

        public function DetailView() {

            createPanel();
            addChild(detailPanel)
            detailPanel.addChild(DetailForm);
        }
        private function createPanel()
        {

            closeBtn=new CreateRoundRectButton(30,30,10,1,0xFFFFFF,"X",0x000000);
            closeBtn.x=DetailForm.width - 25;
            closeBtn.y=2;
            closeBtn.addEventListener(MouseEvent.MOUSE_UP, closePanel,false,0,true);
            DetailForm.addChild(closeBtn)
        }

        public function closePanel(evt:MouseEvent) {
            removeChild(evt.currentTarget)
        }
    }
}

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

1 Ответ

3 голосов
/ 05 декабря 2009

Похоже, вы неправильно понимаете, что такое Event.currentTarget (или это просто ошибка кодирования). В то время, когда closePanel вызывается в результате наведения мыши на closeBtn, значение evt.currentTarget равно closeBtn (поскольку это объект, к которому вы добавили прослушиватель, это объект, обрабатывающий событие). Поскольку closeBtn не является дочерним элементом DetailView, вы не увидите, чтобы что-то произошло. Фактически, если вы запустите отладочную сборку своего кода в проигрывателе отладки, вы увидите, что вызов removeChild приводит к исключению.

Предполагая, что вы хотите удалить detailPanel, вы можете просто проигнорировать currentTarget и удалить то, что, как вы уже знаете, хотите удалить:

public function closePanel(evt:MouseEvent) {
    removeChild(detailPanel);
}

ИЛИ ... Так как MOUSE_UP выдает пузыри, вы можете добавить слушатель к detailPanel, и evt.currentTarget будет detailPanel, поэтому будет работать вызов removeChild:

detailPanel.addEventListener(MouseEvent.MOUSE_UP, closePanel, false, 0, true);
...