As3 Ссылка на класс из временной шкалы - PullRequest
2 голосов
/ 10 декабря 2011

Я не могу понять, что происходит? Я могу импортировать другие классы на временную шкалу и использовать их отлично, но этот класс доставляет мне большие проблемы? Я анализирую данные XML со своего сервера на нем, и он выдает мне ошибки, которые выглядят следующим образом.

Ссылка на график и использование:

     import networkScores;

     var network:networkScores = new networkScores();
     addChild(network);

     score1Textfield.text = network.score1.toString();

Определение класса:

 package 
 {
          import flash.net.URLLoader;
          import flash.net.URLRequest;
          import flash.events.Event;
          import flash.display.MovieClip;

         public class networkScores extends MovieClip
         {
                 public var myXML:XML, myXMLNames:XML;
                 public var xmlLoaderScores = new URLLoader();
                 public var score1:int;

                 public function networkScores()
                 {
                     xmlLoaderScores.addEventListener(
                                Event.COMPLETE, xmlLoadedScores);
                     xmlLoaderScores.load(new URLRequest("pathtoxmlfile"));
                 }

                 public function xmlLoadedScores(e:Event):void
                 {
                      myXML = new XML(e.target.data);
                      var qName1:QName = new QName(
                            "http://www.w3.org/2005/Atom", "score1");
                      score1 = myXML.descendants(qName1)[0].toString();
                 }

        }

     }

Ошибки, которые я получаю:

Сцена 1, Уровень «Действия», Кадр 4, Строка 149 1119: Доступ к возможно неопределенной оценке свойства1 через ссылку со статическим типом networkScores.

1067: неявное приведение значения типа networkScores к несвязанному типу flash.display: DisplayObject.

Это проблема с кастингом?

как я могу это исправить?

1 Ответ

1 голос
/ 11 декабря 2011

Ваша временная шкала не должна пытаться ссылаться на документ Class.Класс документа должен контролировать все.Существует несколько способов узнать, когда объект был добавлен на сцену и готов к решению (например, прослушивание для добавления на сцену).Как только вы узнаете, что объект был добавлен, и вы также знаете, что ваш xml вернулся, вы можете заполнить переменную дочернего объекта, который вы выставили в его документе Class.Подробнее об этом читайте в этом блоге http://www.developria.com/2010/04/combining-the-timeline-with-oo.html и сопровождающем коде здесь http://flexdiary.blogspot.com/2010/04/sample-code-for-oop-timeline-insideria.html.

РЕДАКТИРОВАТЬ, чтобы показать код:

Код для негоможет выглядеть примерно так:

package {
   public class Main extends MovieClip {
      private var _stageInstance:StageInstance;
      private var _score:String;
      private var _loader:URLLoader;//hold loader in memory so it doesn't gc before it returns
      //by using a getter/setter pair, we know when Flash has added the instance to the stage
      public function get stageInstance():StageInstance{
          return _stageInstance;
      }
      public function set stageInstance(value:StageInstance):void {
         _stageInstance = value;
         if (_stageInstance != null && _score != null) {
             _stageInstance.score = _score;
         }
      }
      public function onScoreLoaded(e:Event):void {
         myXML = new XML(e.target.data);
         var qName1:QName = new QName("http://www.w3.org/2005/Atom", "score1");
         _score = myXML.descendants(qName1)[0].toString();
         if (stageInstance != null) {
            stageInstance.score = _score;
         }
      }
      public function Main() {
         _loader = new URLLoader();
         _loader.addEventListener(Event.COMPLETE, onScoreLoaded);
         _loader.load(new URLRequest('pathToXML'));
      }
   }

}

package {
   public Class StageInstance extends MovieClip {
       pubic var score1TextField:TextField;//populated by Flash Player
       private vare _score:String;
       //note how the setter here is doing something useful, not just passing through the value
       public function get score():String {
          return _score;
       }
       public function set score(value:String):void {
          _score=value;
          score1TextField.text=score;
       }
       public function StageInstance() {
          super();
       }

   }

}
...