Actionscript父级内的父级内的子级

时间:2010-08-24 22:46:07

标签: actionscript-3 flash-cs4 parent-child

我正在尝试制作一个计算器,用户可以从项目列表中进行选择。如果用户点击说“ITEM1”,则应将该项添加到“CONTAINER_MC”。我遇到的问题是我的所有数据都设置在一个包含名称和价格的数组中,如下面的代码。


var menuNames:Array = [
 "Item1",
 "Item2",
 "Item3",
 "Item4",
 "item5",
 "item6"
];

//price array
var menuPrices:Array = [
 "0.99",
 "1.99",
 "2.99",
 "5.99",
 "6.99",
 "10.99"
];

现在我有一个精灵,通过使用包含2个输入字段的影片剪辑为每个项目创建一个菜单,我设置如下代码。

var menuSprite:Sprite = new Sprite(); 

var totalItems:Number = menuNames.length;
var item:menuItem; //new item field
var btn:add_btn;
for(var i = 0; i < totalItems; i++) {
 item = new menuItem(); 
 btn = new add_btn();
 menuSprite.addChild(item);
 item.addChild(btn);
 item.x = 0;
 item.y = i * 80;
 btn.y = 45;
 item.itemName.text = menuNames[i];
 item.itemPrice.text = "$" + menuPrices[i];  
}
addChild(menuSprite);

到目前为止一切正常,问题是我的项目中有一个按钮,我需要为这些按钮添加偶数监听器,问题是如何定位这些按钮。由于这些按钮是通过for循环添加的,因此它们没有给出实例名称,所以请注意我如何定位存储在“item”中的输入字段,我使用itemName但是如何对项目中存储的按钮执行此操作。

谢谢,非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

这样的事情:

var menuSprite:Sprite = new Sprite(); 

        var totalItems:Number = menuNames.length;
        var item:menuItem; //new item field
        var btn:add_btn;
        for(var i = 0; i < totalItems; i++) {
            item = new menuItem(); 
            btn = new add_btn();
            btn.addEventListener(MouseEvent.CLICK,clickHndlr);
            menuSprite.addChild(item);
            item.addChild(btn);
            item.x = 0;
            item.y = i * 80;
            btn.y = 45;
            item.itemName.text = menuNames[i];
            item.itemPrice.text = "$" + menuPrices[i];  
        }
        addChild(menuSprite);

        public function clickHndlr(event:MouseEvent):void
        {
            ((event.currentTarget as add_btn).parent as menuItem).itemName.text="Any of changes";
        }

但我还想将数组更改为Dictionary实例,如下所示:

var menuData=new Dictionary();

        //filling our Dictionary instead of weird arrays
        for(var i:int=0;i<10;i++)
            menuData["Item"+i]=Math.round(Math.random()*100);

        var menuSprite:Sprite = new Sprite(); 

        var item:menuItem; //new item field
        var btn:add_btn;

        for(var menuName:Object in menuData)
        {   
            item = new menuItem(); 
            btn = new add_btn();
            btn.addEventListener(MouseEvent.CLICK,clickHndlr);
            menuSprite.addChild(item);
            item.addChild(btn);
            item.x = 0;
            item.y = i * 80;
            btn.y = 45;

            var menuPrice:int=menuData[menuName] as Number;

            item.itemName.text = menuName as String;
            item.itemPrice.text = "$" + menuPrice.toString();  
        }
        addChild(menuSprite);

        public function clickHndlr(event:MouseEvent):void
        {
            ((event.currentTarget as add_btn).parent as menuItem).itemName.text="Any of changes";
        }

如果说实话,我会放弃Flash,并且更喜欢使用Flex + Catalyst来创建具有出色UI的优秀代码。

询问您是否需要更多信息。

此致 尤金