واضح آرشیو وب فارسی:سایت ریسک: مشکل با توابع و listener amin.flash 03 مهر 1389, 18:10سلام به همگی من یه سوال دلرم لطفا کمک کنید sd.addEventListener(Event.change,f1) df.addEventListener(Event.complete,f1) function f1(evt:Event){ ............. } این 2 تا listener یه تابع رو فراخوانی میکنن حالا سوال من این هست که من میخوام بدونم کدوم یکی از از این listener ها تابع من رو فراخوانی میکنه (برای اجرای تابع مهمه) همون لحظه که میخواد تایع اجرا بشه لازمش دارم وسوال دوم به صورت کلی میخوام بدونم اخرین listener که تو برنامه اجرا شده چی هست یا لیست همه listener هام به صورت کلی و سوال اخر میشه واسه listener های برنامه یه listener کلی تعریف کرد مثلا 10 تا Listener دارم که روی 10 تا loader هستن و به رخداد complete حساس هستن حالا میخوام یه listener بذارم که واسش فرقی نکنه که کدوم loader الان درگیر هست و به طور کلی به رخداد complete همه loader ها حساس باشه ببخشین اگه زیاد و پیچیدس بازم ممنون از کمک دوستان و اساتید ++Hadi++ 03 مهر 1389, 19:041- هر دو چون کلاس اصلیشون Event هست پس میتونن بعد از انجام شدن و صدا زدنشون ، تابع مورد نظر رو که ورودی از نوع کلاس Event می گیره رو اجرا کنند . البته به شرطی که به موقعش صدا زده بشن ... 2- نمی شه گفت کدومشون زودتر اجرا می شن . البته معمولا دستوراتی که زودتر و در خطوط بالاتر نوشته می شن زودتر کامپایل می شن ولی شاید دستور پایینی به سرعت اجرا بشه ولی دستور بالایی طول بکشه تا مثلا یه فایل رو تماما لود کنه و بعد اون رویداد رو صدا بزنه و باعث اجرای تابع مورد نظر باشه .وقتی شی مورد نظر فایلی رو مثلا لود می کنه یا بههر عنوان کاری مورد نظر رو انجام میده ، یه رویداد از نوع رشته ای که در متغیر استاتیکی واقع در کلاس Event قرار گرفته با اسم رشته مورد نظر dispatch می شه و این گوش کننده هم گوش می کنه تا هر وقت که اون dispatch شد ، تابع مورد نظرش رو اجرا کنه . 3- بله به این صورت ... var Arr:Array=new Array(); var MainCounter:int=0; Make(); addEventListener("ThisIsComplete",_EXECUTE); function Make():void { var myLoader:Loader=new Loader(); Arr | MainCounter|= myLoader; addChild(Arr| MainCounter|); myLoader.contentLoaderInfo.addEventListener(Event. COMPLETE,comp); myLoader.load(new URLRequest(String(URLArray | MainCounter |))); } function comp(evt:Event):void { MainCounter++; if(MainCounter==10) { dispatchEvent(new Event("ThisIsComplete",true,true)); } else { Make(); } } function _EXECUTE(evt:Event):void { trace("This Is Complete!!!"); } در دستورات بالا به جای | | علامت [ ] بزار چون وقتی من تو اینجا می زارم فیلتر می شه ... بای... Bye... Insomnia 03 مهر 1389, 19:37تابعی که به Event.COMPLETE وابسته است زودتر اجرا میشه! بعد اگر تغییری در شی ات ایجاد بشه ، تابعی که براش نوشته شده اجرا میشه... amin.flash 03 مهر 1389, 19:41سلام هادی جان ممنون از کمکت واقها عالی بود ولی مشکل من حادتر از این چیزاست این کدی که نوشتم یه مثال بود نه خود برنامه من راستش من یه uiloader , scrollbar , slider , text دارم با 10 -20 تا listener که هرکدوم یه فانکشن و یه رویداد متفاوت دارن که ممکن بخشی از دستورات و توابعی که هر کدوم از این listener های متفاوت(حتما باید متفاوت باشن) فراخوانی میکنن یکسان باشه و تنها یکم با هم فرق میکنن من برای جلوگیری از زیاد شدن کدهای تکراری میخوام وقتی 2 تا listener متفاوت یه فانکشن را اجرا میکنن مثلا 40 خطش که ثابت هست رو اجرا کنه و به به شرایط و رویداد و listener فقط 10 خطی که مخصوص اون listener ورویداد هست رو اجرا کنه بیشتر برنامه بر اساس mouseEvent , keyboard Event هست که باید کاربر تو اون تغییر ایجاد کنه و هیچکدوم از مسائل مورد نظر من توسط فلش اجرا نمیشه(رویدادهام از نوع event نیست) حالا من لازم دارم که بدونم اخرین بار کدوم listener اومده فانکشنم رو اجرا کرده و در صورت لزوم اخرین event (از هر نوعی) که باعث تحریک listener و نهایتا فراخوانی تابع شده چی بوده در حالت کلی اگه بشه همه این listener ها به ترتیب تو یه ارایه ذخیره بشه عالیه امیدوارم منظورم رو درست رسونده باشم ومعذرت میخوام که واضح حرفمو نزدم و باعث زحمتت شدم ++Hadi++ 04 مهر 1389, 13:07می تونی یه آرایه طراحی کنی و هر وقت که تابع مد نظرتون فذاخوانی می شه (با Event ) اون ورودی evt:Event رو به اون آرایه پاس بدی : EventsArray.push(evt); بهترین راه اینه که اگه قراره یه سری کارهای تکراری مثلا با تعداد 40 خط اجرا شه ، همه رو تو یه تابع بزاری و توابع مختلفی رو به رویدادهای مختلف بدی و همه این توابع بعد از اثر گذاری خاص خودشون به نسبت رویداد صدا زده شده ، اون تابع رو اجرا کنند ... بیشتر از این مورد سعی کن زیاد به تعداد خطها حساس نشی ... چون انقده هم محسوس نیست ... بای... سایت ما را در گوگل محبوب کنید با کلیک روی دکمه ای که در سمت چپ این منو با عنوان +1 قرار داده شده شما به این سایت مهر تأیید میزنید و به دوستانتان در صفحه جستجوی گوگل دیدن این سایت را پیشنهاد میکنید که این امر خود باعث افزایش رتبه سایت در گوگل میشود
این صفحه را در گوگل محبوب کنید
[ارسال شده از: سایت ریسک]
[مشاهده در: www.ri3k.eu]
[تعداد بازديد از اين مطلب: 277]