2

初めてのポスターはこちら。

そこで、「マルチ RSS フィード リーダー」を作成し、これを「TechFeed.as」と「Feed.as」の 2 つのクラスに分割しました。技術フィードは、URL を新しい Feed オブジェクトに渡すことによって、複数のフィードをインスタンス化します。

現時点での問題は、Feed.as には、フィードに関する基本的な詳細を表示するために TechFeed.as で使用されるいくつかのパブリック変数があることですが、これらの変数は、Feed.as の関数内で指定した値を保持することを拒否します。 、そして「ヌル」になっています。

編集:また、注意すべきことがあります。TechFeed.as は、ステージが使用するメインの AS ファイルです。

TechFeed.as

package  {

    import flash.display.MovieClip;

    public class TechFeed extends MovieClip {

        private var feed_one:Feed = new Feed("http://feeds.feedburner.com/crunchgear");
        private var feed_two:Feed = new Feed("http://feeds.mashable.com/Mashable");
        private var feed_three:Feed = new Feed("http://www.engadget.com/rss.xml");

        public function TechFeed() {
            trace(feed_one.feed_title);

            //feed_name.text = feed_one.getFeedTitle();
        }

    }

}

Feed.as

package  {

    import flash.net.URLLoader;
    import flash.events.Event;
    import flash.net.URLRequest;

    public class Feed {

        //Public variables to display feed info
        public var feed_title:XMLList;
        public var feed_desc:String;
        public var feed_link:String;

        //Setting up variables which help load the feeds

        private var feedXML:XML;
        //Create a loader to load an external URL
        private var loader:URLLoader = new URLLoader();


        public function Feed(inURL:String = "") {
            //Load the xml document
            loader.load(new URLRequest(inURL));
            loader.addEventListener(Event.COMPLETE,onLoaded);
        }

        //When the loader had loaded the xml document, pass that into a variable for use. 
        private function onLoaded(e:Event):void {
            feedXML = new XML(e.target.data);

            // break down the xml document elements into singular XML array lists

            //Feed details
            this.feed_title = feedXML.channel.title;
            this.feed_link = feedXML.channel.link;
            this.feed_desc = feedXML.channel.description;

            trace(this.feed_title);

        }

    }

}

どんな助けでも大歓迎です:)

ありがとう、ジェフ

4

2 に答える 2

1

問題がfeed_one.feed_titleTechFeed() ctor で null になることである場合、それはフィードの読み込みが完了するのを待っていないためです。あなたがしなければならないことは、データのロードと処理が完了したときに Feed からイベントをディスパッチし、それを TechFeed でキャッチしてから、必要に応じてパブリック変数を使用することです (これは、Feed クラスが EventDispatcher をサブクラス化する必要があることも意味します)。

フィード クラス:

private function onLoaded(e:Event):void {
            feedXML = new XML(e.target.data);

            // break down the xml document elements into singular XML array lists

            //Feed details
            this.feed_title = feedXML.channel.title;
            this.feed_link = feedXML.channel.link;
            this.feed_desc = feedXML.channel.description;

            trace(this.feed_title);
            dispatchEvent(new Event(Event.COMPLETE));////Dispatch Event

        }

TechFeed クラス:

public function TechFeed() {
            trace(feed_one.feed_title);//This will trace "null"
            feed_one.addEventListener(Event.COMPLETE, dataLoaded);//add event listener
        }
private function dataLoaded(e:Event):void{
            var feed = Feed(e.currentTarget);
            feed.removeEventListener(Event.COMPLETE, dataLoaded);//remove event listener to prevent memory leaks
            trace(feed.feed_title);// This will trace the correct title
        }
于 2012-10-17T06:17:56.750 に答える
1

問題は、サーバーから返される前にフィードからデータを書き込もうとするタイミングです。
この例では、データがロードされたときにコールバックする関数を割り当てます。

パッケージ {

    import flash.display.MovieClip;

    public class TechFeed extends MovieClip {

        private var feed_one:Feed;
        private var feed_two:Feed;
        private var feed_three:Feed;

        public function TechFeed() {
          feed_one= new Feed("http://feeds.feedburner.com/crunchgear",assignResults);
          feed_two= new Feed("http://feeds.mashable.com/Mashable",assignResults);
          feed_three= new Feed("http://www.engadget.com/rss.xml",assignResults);


        }

        public function assignResults(value:value):void{
          feed_name.text = value;
        }

    }

}






package  {

    import flash.net.URLLoader;
    import flash.events.Event;
    import flash.net.URLRequest;

    public class Feed {

        //Public variables to display feed info
        public var feed_title:XMLList;
        public var feed_desc:String;
        public var feed_link:String;

        //Setting up variables which help load the feeds

        private var feedXML:XML;
        //Create a loader to load an external URL
        private var loader:URLLoader = new URLLoader();

private var _callBackFunc:Function;
        public function Feed(inURL:String = "", callBackFunc:Function) {


           this._callBackFunc = callBackFunc;


            //Load the xml document
            loader.load(new URLRequest(inURL));
            loader.addEventListener(Event.COMPLETE,onLoaded);
        }

        //When the loader had loaded the xml document, pass that into a variable for use. 
        private function onLoaded(e:Event):void {
            feedXML = new XML(e.target.data);

            // break down the xml document elements into singular XML array lists

            //Feed details
            this.feed_title = feedXML.channel.title;
            this.feed_link = feedXML.channel.link;
            this.feed_desc = feedXML.channel.description;

            this._callBackFunc(this.feed_title);

        }

    }

}
于 2012-10-17T13:53:33.373 に答える