Actionscript Child внутри родителя внутри родителя - PullRequest
1 голос
/ 25 августа 2010

Я пытаюсь сделать калькулятор, где пользователь может выбирать из списка элементов. Если пользователь нажимает «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, им не присваиваются имена экземпляров, поэтому обратите внимание, как я нацелил поля ввода, хранящиеся в «элементе», я использовал itemName, но как бы я сделал это для кнопок, хранящихся внутри элемента.

Спасибо, очень ценю любую возможную помощь.

1 Ответ

0 голосов
/ 25 августа 2010

Примерно так:

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 для создания отличного кода с отличным пользовательским интерфейсом.

Спросите больше, если вам нужна дополнительная информация.

С уважением Eugene

...