تغییر متغیرهای گلوبال در یک کلاس

ahmad ajiloo

New Member
[FONT=tahoma,sans-serif]سلام
من یک چنین کلاسی درست کرده ام:
[/FONT]
PHP:
package  {
    import flash.display.MovieClip;
    import flash.events.Event;
    import flash.net.URLLoader;
    import flash.net.URLRequest;
    
    public class White extends MovieClip{
        public var myXML:XML;
        public var unisNumber:int;
        public function White() {            
        }
        public function setContent():void{
            var myLoader:URLLoader = new URLLoader();
            myLoader.load(new URLRequest("universities.xml"));
            myLoader.addEventListener(Event.COMPLETE, processXML);
        }
        public function processXML(e:Event):void {
            myXML = new XML(e.target.data);
            unisNumber = myXML.uni.length();
        }
        public function getUnisNumber():int{
            return unisNumber;
        }
        public function getMyXML():XML{
            return myXML;
        }

    }
    
}
[FONT=tahoma,sans-serif]مشکلم این است که دارم در processXML متغیرهای گلوبالی که تعریف کرده بودم را عوض می کنم. این متغیرها در تابع مذکور مقداردهی می شوند اما در توابع دیگر مقدارشان عوض نمی شود. یعنی اگر بعد از اینکه processXML اجرا شد، تابع getUnisNumber را صدا بزنم، همان مقدار صفر را که به صورت پیش فرض هنگام تعریف شدن می گیرد، برمیگرداند.
فایل xml ام هم اینجوری است:
[/FONT]
PHP:
<?xml version="1.0" encoding="UTF-8"?>
<universities>
    <uni id="u001">
        <unix>100</unix>
        <uniy>30</uniy>
        <uniname>اميرکبير</uniname>
        <ostan>تهران</ostan>
        <korsi>
            <pic picid="0">
                <picaddr></picaddr>
                <picinfo></picinfo>
            </pic>
        </korsi>
    </uni>
</universities>
 

++Hadi++

Active Member
باید در ابتدا اون تابع setContent رو تو constructor صدا بزنید تا اول اجرا بشه.بعد که لود ایکسمل به پایان رسید،تابع ProcessXML صدا زده می شه و بعد متغیر ست می شه.این عمل جزو عمل های پشت سر همی هست و یه کم زمان بر هست.رو همین حساب تا لود ایکسمل به اتمام نرسه ،اون متغیر ست نمی شه .پس سه راه دارید.راه اول موثق نیست و اینه :
1- با تابع setTimeout و با دادن یه وقفه زمانی،مقدار جدید رو تریس کنید که البته اگه زمان وقفه از زمان لود ایکسمل کمتر باشه باز نتیجه ای نمی گیریدو
2- یه چیزی شبیه به event رو قرار بدید تا هر وقت ایکسمل کامل لود شد ،اونو dispatch کنید که البته آموزش Dispatch Event تو امضامه.
3-یه تابع رو تعریف کنید که هر وقت کار لود ایکسمل تموم شد،اونو اجرا کنید.پس خواهید داشت:

PHP:
package  {
    import flash.display.MovieClip;
    import flash.events.Event;
    import flash.net.URLLoader;
    import flash.net.URLRequest;
    
    public class White extends MovieClip{
        public var myXML:XML;
        public var unisNumber:int;
        public function White() 
{            
   setContent();
        }
        public function setContent():void{
            var myLoader:URLLoader = new URLLoader();
            myLoader.load(new URLRequest("universities.xml"));
            myLoader.addEventListener(Event.COMPLETE, processXML);
        }
        public function processXML(e:Event):void {
            myXML = new XML(e.target.data);
            unisNumber = myXML.uni.length();
   this.dispatchEvent(new Event("XML_LOADED",true,true));
        }
        public function getUnisNumber():int{
            return unisNumber;
        }
        public function getMyXML():XML{
            return myXML;
        }

    }
    
}
 

جدیدترین ارسال ها

بالا