AS3 URLRequest для проблемы с циклом

Я прочитал некоторые данные из файла xml, все отлично работает, кроме URL-адресов. Я не могу понять, в чем проблема с функцией "navigateURL" или с eventListener... на какой квадрат я нажимаю, он открывает последний URL-адрес из файла xml

for(var i:Number = 0; i <= gamesInput.game.length() -1; i++)
 {
  var square:square_mc = new square_mc();

  //xml values
  var tGame_name:String   = gamesInput.game.name.text()[i];//game name
  var tGame_id:Number     = gamesInput.children()[i].attributes()[2].toXMLString();//game id
  var tGame_thumbnail:String  = thumbPath + gamesInput.game.thumbnail.text()[i];//thumb path
  var tGame_url:String     = gamesInput.game.url.text()[i];//game url

  addChild(square);
  square.tgname_txt.text = tGame_name;
  square.tgurl_txt.text = tGame_url;

  //load & attach game thumb
  var getThumb:URLRequest = new URLRequest(tGame_thumbnail);
  var loadThumb:Loader = new Loader();
   loadThumb.load(getThumb);
   square.addChild(loadThumb);
  //
  square.y = squareY;
  square.x = squareX;
  squareX += square.width + 10;

  square.buttonMode = true;
  square.addEventListener(MouseEvent.CLICK, navigateURL);

 }

 function navigateURL(event:MouseEvent):void
 { 
  var url:URLRequest = new URLRequest(tGame_url);
  navigateToURL(url, "_blank");
  trace(tGame_url);
 }

Большое спасибо!


person Adrian    schedule 11.06.2010    source источник
comment
Просто интересно, разобрались ли вы с проблемой? Поскольку у меня такая же проблема, я не могу получить доступ к любому дочернему элементу, добавленному с помощью цикла for извне. Что-то с проблемой области?   -  person Benyaman    schedule 25.04.2014


Ответы (4)


В navigationURL() вы используете tGame_url, но я думаю, вы бы предпочли использовать что-то вроде tgurl_txt.text, который будет разным для каждого квадрата.

person George Phillips    schedule 11.06.2010
comment
Привет, я пытался, как вы сказали, но я получаю то же самое... Он всегда получает последний URL-адрес из xml :(. спасибо за вашу поддержку! - person Adrian; 12.06.2010

Похоже, вы неправильно подключаете прослушиватель событий. Вместо this.addEventListener прикрепите его к переменной, которую вы создали при создании нового Square_mc..... так:

Square.addEventListener (MouseEvent.CLICK, navigationURL);

person Michael    schedule 11.06.2010

вы должны добавить addEventListener на квадраты

ммм... все еще выясняю, как функция обработчика событий когда-нибудь получит правильную переменную tgame_url.

Что, если вы попробуете это:

 square.addEventListener(MouseEvent.CLICK, function navigateURL(event:MouseEvent):void 
 {  
    var url:URLRequest = new URLRequest(tGame_url); 
     navigateToURL(url, "_blank"); 
    trace(tGame_url); 
  });
person S P    schedule 11.06.2010
comment
eventListener прикреплен к квадратам и работает, но все квадраты имеют один и тот же URL... - person Adrian; 12.06.2010
comment
Привет, большое спасибо за ваш ответ, я пытался, но все равно не получилось - person Adrian; 12.06.2010

попробуйте проследить это:

function navigateURL(event:MouseEvent):void
 { 
  var url:URLRequest = new URLRequest(tGame_url);
  navigateToURL(url, "_blank");
  //trace(tGame_url);
  trace(event.currentTarget.tgurl_txt.text);
 }

вы должны добавить URL-адрес на свой квадрат в цикле

square.theUrl = tGame_url;

в функции прослушивателя событий вы должны иметь доступ к ней с помощью

event.currentTarget.theUrl;
person Alex Milde    schedule 30.06.2010