2010-08-24 5 views
1

Я пытаюсь сделать калькулятор, в котором пользователь может выбрать из списка элементов. Если пользователь нажимает «ITEM1», он должен добавить элемент в «CONTAINER_MC». У меня проблема - все мои данные установлены внутри массива, содержащего имена и цены, такие как код ниже.Actionscript Ребенок внутри родителя внутри родителя

 

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, но как бы сделать это с кнопками, хранящимися внутри элемента.

Благодарим вас, действительно оцените любую помощь.

ответ

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"; 
     } 

Но я также хотел бы изменить массивы в словарь экземпляра, например:

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

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

С уважением Евгений

+0

я мог бы сделать больше, если у меня будет demoProject от вашего, чтобы изменить его :) – Eugene

+1

Wow это удивительно, я не знал, что вы можете просто использовать btn.addEventListener так, было скремблируя весь день, и вы просто спасли меня. Просто еще один вопрос, предположим, теперь я хотел удалить элементы из списка, как показано ниже. http://i221.photobucket.com/albums/dd298/ramdeen32/Computer/itemsCalculator.jpg Обратите внимание, что элементы есть, но у меня нет подсказки относительно того, как я могу сказать, удалить элемент из списка после его появления , Я думал о возможно включении флажков или чего-то другого, но это может быть слишком сложным. Большое спасибо! – 1337holiday

+0

О, и вот ссылка на файл, который вы запросили, http://www.4shared.com/file/C9fcc9ql/priceCalculator.html – 1337holiday

Смежные вопросы