Actionscript 3 关于使用actionscript在自定义事件中携带数据的疑问

Actionscript 3 关于使用actionscript在自定义事件中携带数据的疑问,actionscript-3,flex3,event-handling,Actionscript 3,Flex3,Event Handling,我正在编写actionscript,以便使用来自HTTP请求的JSON数据动态生成SWF。我收到creationComplete上的数据,并尝试生成一个树状结构。我不会同时创建整个树。我创建了两个级别,级别1和级别2。我的目标是在表示树节点的面板上附加自定义事件。当用户单击面板时,它将发送自定义事件并尝试生成下一级别。所以,它是这样的: 创建完成->获取JSON->创建顶级两级->单击级别2->创建级别2和级别3->单击级别3->创建级别3和级别4…等等等等。我将我的代码附在这封电子邮件中。请看

我正在编写actionscript,以便使用来自HTTP请求的JSON数据动态生成SWF。我收到creationComplete上的数据,并尝试生成一个树状结构。我不会同时创建整个树。我创建了两个级别,级别1和级别2。我的目标是在表示树节点的面板上附加自定义事件。当用户单击面板时,它将发送自定义事件并尝试生成下一级别。所以,它是这样的: 创建完成->获取JSON->创建顶级两级->单击级别2->创建级别2和级别3->单击级别3->创建级别3和级别4…等等等等。我将我的代码附在这封电子邮件中。请看一看,如果您需要绘制一棵总标高为“n”的树,其中n=0到100,那么您是否有任何关于如何执行此操作的提示 我应该在CustomPageClickEvent类中携带数据吗。 [守则]

导入com.iwobanas.effects.*;
导入flash.events.MouseEvent;
导入flash.filters.BitmapFilterQuality;
导入flash.filters.BitmapFilterType;
导入flash.filters.GradientGlowFilter;
导入mx.controls.Alert;
私人var roundedMask:雪碧;
私有var面板:NewPanel;
public var oldPanelIds:Array=new Array();
公共变量页:数组=新数组();
public-var-delPages:Array=new-Array();
公共函数DrawPlaybook(位置:编号,标题:字符串,chld:Object):无效{
面板=新面板(chld);
panel.title=标题;
小组名称=标题;
面板宽度=100;
面板高度=80;
面板x=位置+5;
面板y=40;
var gradientGlow:GradientGlowFilter=新的GradientGlowFilter();
gradientGlow.distance=0;
gradientGlow.angle=45;
gradientGlow.colors=[0xFFFFF0,0xFFFFFF];
gradientGlow.alphas=[0,1];
gradientGlow.ratios=[0255];
gradientGlow.blurX=10;
gradientGlow.blurY=10;
梯度发光强度=2;
gradientGlow.quality=位图过滤器quality.HIGH;
gradientGlow.type=BitmapFilterType.OUTER;
panel.filters=[gradientGlow];
this.rawChildren.addChild(面板);
页面。推送(面板);
panel.addEventListener(MouseEvent.CLICK,
函数(e:MouseEvent){onClickHandler(e,title,chld)};
此.addEventListener(CustomPageClickEvent.PANEL)已单击,
函数(e:CustomPageClickEvent){onCustomPanelClicked(e,title)});
}
公共函数onClickHandler(e:MouseEvent,title:String,chld:Object):void{
对于每个(var stp1:新面板,共页){
if(stp1.title==title){
var eventObj:CustomPageClickEvent=新的CustomPageClickEvent(“panelClicked”);
eventObj.panelClicked=stp1;
调度事件(eventObj);
}
}
}
单击自定义面板时的私有函数(e:CustomPageClickEvent,标题:String):void{
显示警报(“onCustomPanelClicked”+标题);
var面板:NewPanel;
对于每个(var stp:NewPanel,共页){
启动(e,stp);
}
if(title==e.panelClicked.title){
面板=新面板(空);
panel.title=标题;
小组名称=标题;
面板宽度=150;
面板高度=80;
面板x=100;
面板y=40;
this.rawChildren.addChild(面板);
var slideRight:slideRight=newslideright();
slideRight.target=面板;
幻灯片灯光。持续时间=750;
slideRight.showTarget=true;
slideRight.play();
var jsonData=this.map.getValue(title);
var posX:Number=50;
变量posY:Number=175;
对于每个(变量pnl:NewPanel,以页为单位){
pages.pop();
}
for each(var stp1:jsonData.children中的对象){
面板=新面板(空);
panel.title=stp1.text;
panel.name=stp1.id;
面板宽度=100;
panel.id=stp1.id;
面板高度=80;
面板.x=posX;
panel.y=posY;
posX+=150;
var s:String=“hi”+stp1.text;
panel.addEventListener(MouseEvent.CLICK,
函数(e:MouseEvent){onChildClick(e,s);});
此.addEventListener(CustomPageClickEvent.PANEL)已单击,
函数(e:CustomPageClickEvent){onCustomPanlClicked(e)});
this.rawChildren.addChild(面板);
页面。推送(面板);
此.addEventListener(CustomPageClickEvent.PANEL)已单击,
函数(e:CustomPageClickEvent){onCustomPanelClicked(e,title)});
变量slide:SlideUp=newslideup();
slide.target=面板;
幻灯片:持续时间=1500;
slide.showTarget=false;
slide.play();
}       
}
}
公共函数onChildClick(e:MouseEvent,s:String):void{
对于每个(var stp1:新面板,共页){
if(stp1.title==e.currentTarget.title){
var eventObj:CustomPageClickEvent=新的CustomPageClickEvent(“panelClicked”);
eventObj.panelClicked=stp1;
调度事件(eventObj);
}
} 
}      
自定义单击的私有函数(e:CustomPageClickEvent):无效{
对于每个(变量pnl:NewPanel,以页为单位){
pages.pop();
}
}   
专用功能fadePanel(事件:事件,面板:新建面板):无效{
panel.alpha-=.005;

如果(panel.alpha完全忘记了我没有足够的rep来编辑

import com.iwobanas.effects.*;
import flash.events.MouseEvent;
import flash.filters.BitmapFilterQuality;
import flash.filters.BitmapFilterType;
import flash.filters.GradientGlowFilter;
import mx.controls.Alert;

private var roundedMask:Sprite;
private var panel:NewPanel;
public var oldPanelIds:Array = new Array();

public var pages:Array = new Array();

public var delPages:Array = new Array();

public function DrawPlaybook(pos:Number,title:String,chld:Object):void {
    panel = new NewPanel(chld);
    panel.title = title;
    panel.name=title;
    panel.width = 100;
    panel.height = 80;
    panel.x=pos+5;
    panel.y=40;

    var gradientGlow:GradientGlowFilter = new GradientGlowFilter();
    gradientGlow.distance = 0;
    gradientGlow.angle = 45;
    gradientGlow.colors = [0xFFFFF0, 0xFFFFFF];
    gradientGlow.alphas = [0, 1];
    gradientGlow.ratios = [0, 255];
    gradientGlow.blurX = 10;
    gradientGlow.blurY = 10;
    gradientGlow.strength = 2;
    gradientGlow.quality = BitmapFilterQuality.HIGH;
    gradientGlow.type = BitmapFilterType.OUTER;

    panel.filters = [gradientGlow];

    this.rawChildren.addChild(panel);
    pages.push(panel);

    panel.addEventListener(MouseEvent.CLICK, function(e:MouseEvent){onClickHandler(e,title,chld)});
    this.addEventListener(CustomPageClickEvent.PANEL_CLICKED, function(e:CustomPageClickEvent){onCustomPanelClicked(e,title)});  
}
public function onClickHandler(e:MouseEvent,title:String,chld:Object):void {
    for each(var stp1:NewPanel in pages){
        if(stp1.title==title){
            var eventObj:CustomPageClickEvent = new CustomPageClickEvent("panelClicked");
            eventObj.panelClicked = stp1;
            dispatchEvent(eventObj); 
        }
    }
}
private function onCustomPanelClicked(e:CustomPageClickEvent,title:String):void {

    Alert.show("onCustomPanelClicked" + title);
    var panel:NewPanel;
    for each(var stp:NewPanel in pages){
        startAnimation(e,stp);
    }
    if(title == e.panelClicked.title){
        panel = new NewPanel(null);
        panel.title = title;
        panel.name=title;
        panel.width = 150;
        panel.height = 80;
        panel.x=100;
        panel.y=40;
        this.rawChildren.addChild(panel);

        var slideRight:SlideRight = new SlideRight();
        slideRight.target=panel;
        slideRight.duration=750;
        slideRight.showTarget=true;
        slideRight.play();

        var jsonData = this.map.getValue(title);
        var posX:Number = 50;
        var posY:Number = 175;
        for each ( var pnl:NewPanel in pages){
            pages.pop();
        }
        for each ( var stp1:Object in jsonData.children){
            panel = new NewPanel(null);
            panel.title = stp1.text;
            panel.name=stp1.id;
            panel.width = 100;
            panel.id=stp1.id;
            panel.height = 80;
            panel.x = posX;
            panel.y=posY;
            posX += 150;

            var s:String="hi" + stp1.text;
            panel.addEventListener(MouseEvent.CLICK, function(e:MouseEvent){onChildClick(e,s);});
            this.addEventListener(CustomPageClickEvent.PANEL_CLICKED, function(e:CustomPageClickEvent){onCustomPnlClicked(e)});

            this.rawChildren.addChild(panel);
            pages.push(panel);
            this.addEventListener(CustomPageClickEvent.PANEL_CLICKED, function(e:CustomPageClickEvent){onCustomPanelClicked(e,title)}); 
            var slide:SlideUp = new SlideUp();
            slide.target=panel;
            slide.duration=1500;
            slide.showTarget=false;
            slide.play();
        }       
    }
}
public function onChildClick(e:MouseEvent,s:String):void {
    for each(var stp1:NewPanel in pages){
        if(stp1.title==e.currentTarget.title){
            var eventObj:CustomPageClickEvent = new CustomPageClickEvent("panelClicked");
            eventObj.panelClicked = stp1;
            dispatchEvent(eventObj); 
        }
    } 
}      
private function onCustomPnlClicked(e:CustomPageClickEvent):void {
    for each ( var pnl:NewPanel in pages){
        pages.pop();
    }
}   
private function fadePanel(event:Event,panel:NewPanel):void{
    panel.alpha -= .005;
    if (panel.alpha <= 0){
        panel.removeEventListener(Event.ENTER_FRAME, 
        function(e:Event){fadePanel(e,panel);});
    };
    panel.title=""; 
}

private function startAnimation(event:CustomPageClickEvent,panel:NewPanel):void{
    panel.addEventListener(Event.ENTER_FRAME, 
    function(e:Event){fadePanel(e,panel)});
}
导入com.iwobanas.effects.*;
导入flash.events.MouseEvent;
导入flash.filters.BitmapFilterQuality;
导入flash.filters.BitmapFilterType;
导入flash.filters.GradientGlowFilter;
导入mx.controls.Alert;
私人var roundedMask:雪碧;
私有var面板:NewPanel;
public var oldPanelIds:Array=new Array();
公共变量页:数组=新数组();
public-var-delPages:Array=new-Array();
公共函数DrawPlaybook(位置:编号,标题:字符串,chld:Object):无效{
面板=新面板(chld);
panel.title=标题;
P
import com.iwobanas.effects.*;
import flash.events.MouseEvent;
import flash.filters.BitmapFilterQuality;
import flash.filters.BitmapFilterType;
import flash.filters.GradientGlowFilter;
import mx.controls.Alert;

private var roundedMask:Sprite;
private var panel:NewPanel;
public var oldPanelIds:Array = new Array();

public var pages:Array = new Array();

public var delPages:Array = new Array();

public function DrawPlaybook(pos:Number,title:String,chld:Object):void {
    panel = new NewPanel(chld);
    panel.title = title;
    panel.name=title;
    panel.width = 100;
    panel.height = 80;
    panel.x=pos+5;
    panel.y=40;

    var gradientGlow:GradientGlowFilter = new GradientGlowFilter();
    gradientGlow.distance = 0;
    gradientGlow.angle = 45;
    gradientGlow.colors = [0xFFFFF0, 0xFFFFFF];
    gradientGlow.alphas = [0, 1];
    gradientGlow.ratios = [0, 255];
    gradientGlow.blurX = 10;
    gradientGlow.blurY = 10;
    gradientGlow.strength = 2;
    gradientGlow.quality = BitmapFilterQuality.HIGH;
    gradientGlow.type = BitmapFilterType.OUTER;

    panel.filters = [gradientGlow];

    this.rawChildren.addChild(panel);
    pages.push(panel);

    panel.addEventListener(MouseEvent.CLICK, function(e:MouseEvent){onClickHandler(e,title,chld)});
    this.addEventListener(CustomPageClickEvent.PANEL_CLICKED, function(e:CustomPageClickEvent){onCustomPanelClicked(e,title)});  
}
public function onClickHandler(e:MouseEvent,title:String,chld:Object):void {
    for each(var stp1:NewPanel in pages){
        if(stp1.title==title){
            var eventObj:CustomPageClickEvent = new CustomPageClickEvent("panelClicked");
            eventObj.panelClicked = stp1;
            dispatchEvent(eventObj); 
        }
    }
}
private function onCustomPanelClicked(e:CustomPageClickEvent,title:String):void {

    Alert.show("onCustomPanelClicked" + title);
    var panel:NewPanel;
    for each(var stp:NewPanel in pages){
        startAnimation(e,stp);
    }
    if(title == e.panelClicked.title){
        panel = new NewPanel(null);
        panel.title = title;
        panel.name=title;
        panel.width = 150;
        panel.height = 80;
        panel.x=100;
        panel.y=40;
        this.rawChildren.addChild(panel);

        var slideRight:SlideRight = new SlideRight();
        slideRight.target=panel;
        slideRight.duration=750;
        slideRight.showTarget=true;
        slideRight.play();

        var jsonData = this.map.getValue(title);
        var posX:Number = 50;
        var posY:Number = 175;
        for each ( var pnl:NewPanel in pages){
            pages.pop();
        }
        for each ( var stp1:Object in jsonData.children){
            panel = new NewPanel(null);
            panel.title = stp1.text;
            panel.name=stp1.id;
            panel.width = 100;
            panel.id=stp1.id;
            panel.height = 80;
            panel.x = posX;
            panel.y=posY;
            posX += 150;

            var s:String="hi" + stp1.text;
            panel.addEventListener(MouseEvent.CLICK, function(e:MouseEvent){onChildClick(e,s);});
            this.addEventListener(CustomPageClickEvent.PANEL_CLICKED, function(e:CustomPageClickEvent){onCustomPnlClicked(e)});

            this.rawChildren.addChild(panel);
            pages.push(panel);
            this.addEventListener(CustomPageClickEvent.PANEL_CLICKED, function(e:CustomPageClickEvent){onCustomPanelClicked(e,title)}); 
            var slide:SlideUp = new SlideUp();
            slide.target=panel;
            slide.duration=1500;
            slide.showTarget=false;
            slide.play();
        }       
    }
}
public function onChildClick(e:MouseEvent,s:String):void {
    for each(var stp1:NewPanel in pages){
        if(stp1.title==e.currentTarget.title){
            var eventObj:CustomPageClickEvent = new CustomPageClickEvent("panelClicked");
            eventObj.panelClicked = stp1;
            dispatchEvent(eventObj); 
        }
    } 
}      
private function onCustomPnlClicked(e:CustomPageClickEvent):void {
    for each ( var pnl:NewPanel in pages){
        pages.pop();
    }
}   
private function fadePanel(event:Event,panel:NewPanel):void{
    panel.alpha -= .005;
    if (panel.alpha <= 0){
        panel.removeEventListener(Event.ENTER_FRAME, 
        function(e:Event){fadePanel(e,panel);});
    };
    panel.title=""; 
}

private function startAnimation(event:CustomPageClickEvent,panel:NewPanel):void{
    panel.addEventListener(Event.ENTER_FRAME, 
    function(e:Event){fadePanel(e,panel)});
}