Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: ActionScript + urlLoader problem
Forum PHP.pl > Forum > Po stronie przeglądarki
LordRaven
Witam,
Mam problem z przypisywaniem zwróconych wartości z URLVariables do tablicy w ActionScript.
Gdy zdarzenie onCompleteHandler jest wykonane, wartości się pięknie zwracają i przypisują do this.broadcast, i mogę sobie porać wszystko np this.broadcast['id'], this.broadcast['name'].
Jednak gdy próbuję pobrać te wartości w konstruktorze Player pod tą funkcją która została wcześniej wykonana, wartości jest null. Obojetnie gdzie próbuję pobrać wartość jest null, chociaż funkcja została wykonana więc powinna być wartość przpisana do this.broadcast, jednak tak się nie dzieję.
Dlaczego ? Jak mogę przypisać warotści zwrócone przez URLVariables do np tablicy, bym mógł później wyciągać je w dowolnym miejscy w klasie ?

Dzięki za każdą pomoc smile.gif

  1. package {
  2.  
  3. import flash.display.*;
  4. import flash.net.*;
  5. import flash.media.*;
  6. import flash.events.*;
  7. import flash.utils.*;
  8.  
  9. public class Player extends MovieClip {
  10.  
  11. var nc:NetConnection = null;
  12. var ns:NetStream = null;
  13. var token:String = null;
  14. var broadcast:URLVariables = null;
  15. var broadcast_id:String = null;
  16.  
  17. public function Player() {
  18. this.message.text = 'Connecting ...';
  19. //this.broadcast_id = LoaderInfo(this.root.loaderInfo).parameters.broadcast;
  20. this.broadcast_id = '135';
  21. this.getBroadcast();
  22. trace(this.broadcast);
  23. trace(this.broadcast['id']);
  24. }
  25.  
  26. public function getBroadcast() {
  27. var urlLoader:URLLoader;
  28. var urlVariables:URLVariables = new URLVariables();
  29.  
  30. urlVariables.broadcast = this.broadcast_id;
  31. var urlRequest:URLRequest = new URLRequest('http://localhost/get');
  32. urlRequest.method = URLRequestMethod.POST;
  33. urlRequest.data = urlVariables;
  34. urlLoader = new URLLoader();
  35. urlLoader.dataFormat = URLLoaderDataFormat.VARIABLES;
  36. urlLoader.load(urlRequest);
  37.  
  38. urlLoader.addEventListener(Event.COMPLETE, onCompleteHandler);
  39. urlLoader.addEventListener(IOErrorEvent.IO_ERROR, onErrorHandler);
  40. }
  41.  
  42. public function onCompleteHandler(e:Event):void {
  43. this.broadcast = new URLVariables(e.target.data);
  44. trace(this.broadcast['id']);
  45. }
  46.  
  47. public function onErrorHandler(e:IOErrorEvent):void {
  48. trace("ioErrorHandler: " + e);
  49. }
  50.  
  51. }
  52.  
  53. }
  54.  


trueblue
Domyślam się, że pobierasz/wyświetlasz ją w konstruktorze wcześniej niż jest wykonany onCompleteHandler.
LordRaven
No właśnie też mi się tak wydaje. A masz jakiś pomysł jak by można było to rozwiązać ?
trueblue
Zależy co chcesz osiągnąć.
Ale chyba dobrym rozwiązaniem byłoby zdefiniować funkcję getBroadcast poza klasą Player, a tą inicjować w onCompleteHandler.
Czyli coś w rodzaju preloadera.
LordRaven
Chce osiągnąć to by mieć przpisane do broadcast wszystko zwrócone przez urlLoader.
A myślisz że coś to da że utworze drugą klasę w której będzie getBroadcast ?
I Później jak będę tworzył jej nowy obiekt w Player, to będę miał to przpisane ?
Bo chodzi mi o to by mieć przpisane wszystko zwrócone przez php.
Wiesz może czy jest gdzieś jakiś przykład jak to mogę zrobić ?

Dzięki wielkie
trueblue
Da o tyle, że tak jak pisałem, zainicjujesz klasę Player w zdarzeniu onCompleteHandler, czyli wymusisz kolejność.
Będziesz miał dostęp do tych danych jeśli przekażesz je do klasy Player.
Tu masz podobny przykład, ale dotyczący PHP: Temat: Klasa w klasie
LordRaven
Zrobiłem tak jak napisałęś, i wszystko pięknie chodzi smile.gif
Mam jeszcze jedno pytanko tylko, ja mogę uzyskać dostęp do elementów z fla normalnie w klasie Player miałem do nich dostęp, jednak w nowej klasie broadcast niemam do nich dostępu. Mam tekst dynamiczny o nazwie message, wcześniej by zmienić go wystarczyło this.message.text = 'Connecting ...'; jednak w nowej klasie pisze że niemam zdefiniowanej właściwości. Jak to rozwiązać ?
trueblue
No, to musisz przenieść taką właściwość do nowej klasy, albo tworzyć metodą w klasie Player, która ją odczyta.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.