توضیح در مورد رویداد textEvent و یا موارد مشابه

سلام
من این سوال را قبلا به شکل دیگری مطرح کردم و برخی دوستان نیز لطف کردند و جوابهایی دادند.
من حدسم این است که برای حل مشکل من یک رویداد ساده باید وجود داشته باشد که کارم را انجام دهم. حالا به مشکلم می پردازم.
برای اینکه نتیجه کلیلک یک دکمه که در یک کلاس دیگر ایجاد میشد و میخاستم در کلاس دیگر و یا به عنوان مثال در کلاس اصلی یا هر کلاسی که از اون برخی پارامترها را ارث میبرد. نتیجه این رویداد اتفاق بیفتد و تابع نتیجه رویداد در کلاس دیگر هست و در کلاس دیگر کارهایی انجام میشود. من قبلا این کار ار می کردم. یعنی در کلاس اصلی یک تایمر تعریف می کردم که کارش گوش به زنگ بودن بود تا به محض اینکه یک شرط از یک پارامتر پابلیک درست درآمد تابع خاصی را اجرا میکند. ولی فکر میکنم روش صحیحی نیستو باید راه اصولی تری هم باشد. مثلا به جای تعریف تایمر یه رویدادی تعریف کنم که کارش گوش به زنگ بودن باشد تا زمانی که مثلا یک پارامتر پابلیک کلاس فرعی true شد اتفاق خاصی بیفتد!!!
من اون رویداد و نحوه نوشتن کدش را میخام. من یک آموزش برای استفاده از رویدادی مثل textEvent دیدم که به نظرم به توضیح بیشتری در این زمینه نیاز دارم.
این رویداد این کار ار می کرد که در زمان کلیک دکمه در کلاس فرعی یک رشته که از قبل تعریف شده بود در کلاس اصلی ایجاد می شود. از دوستان یک توضیح قابل فهم میخام بر اساس توضیحاتی که دادم و ذهنیت مرا نشون میده.
 

triton

کاربر فعال
ببین دوست من بهتر بود با یک مثال ساده توضیح می دادیم ... من که آخرش نفهمیدم چی به چی شد!...ببین درست متوجه شدم یا نه:
ما دوتا کلاس داریم A و B. که B از A ارث بری کرده (B extends A).حالا ما در B یک کلید داریم و در A تابع کنترلگر اون که باید در زمان کلیک باید اجرا بشود:
[PHPS]
public class A
{
public function A()
{
}

public function eventHandler(e:MouseEvent):void
{

}
}
[/PHPS]
[PHPS]
public class B extends A
{
var button:MovieClip;
public function B()
{
button.addEventListener(MouseEvent.CLICK, eventHandler);
}
}
[/PHPS]
اگر وراثتی بین آنها وجود نداشت و فقط نمونه ای از کلاس A را داشتی فقط کافی هست که به این صورت متد کنترلگر را به اون بدی:

[PHPS]
var aInstance:A = new A();
button.addEventListener(MouseEvent.CLICK, aInstance.eventHandler);
[/PHPS]

اگر هم که موضوع را درست متوجه نشدم، یه توضیح با مثال بده که من یا دیگر دوستان بتونیم کمک کنیم.

یه نکته هم واسه مدیران سایت: بابا یک فکری واسه این قسمت کدنویسی ضعیف سایت بکنید! خسته شدیم به خدا! یک کد وسط متن می نویسیم، یه پیش نمایش ازش ببینیم و بعد متن را منتشر کنیم، کدها داغون می شند...همیشه باید قبل از پیش نمایش یه کپی بگیریم، حالا خدا نکنه این کار یادت بره و یا روی این کپی یه کپی دیگه بگیری... چند ساله می یام تو مجید آنلاین هنوز همون جوره ... در زبان فارسی کلمه ای با نام پیشرفت وجود داره (البته خودم اونا کشف کردم!).
 
آخرین ویرایش:
سلام دوستان
البته من هنوز راه حل اول پست شماره 2# دوستمان تریتون را هنوز امتحان نکردم. ولی راه حل دومی را امتحان کردم ولی در عمل باهاش مشکل داشتم. یعنی چون وارد کلاس دیگری میشد و مثل فرزند اون کلاس عمل میکرد و دیگه مستقل عمل نمیکرد. یعنی در زمان اسکرول اطلاعات این کلاس، مطالب کلاس وارد شده نیز اسکرول میشد. که نباید اینگونه باشد و باید مستقل میبود.
حالا سوالم:
من دو تا کلاس دارم به نام test3 و clicked به شکل زیر کدها را نوشتم وقتی اجرا می کنم طبق انتظار salam در خروجی تریس میشه
کدهای کلاس test3

[PHPS]package { import flash.display.MovieClip;
import flash.events.TextEvent;

public class test3 extends MovieClip{
private var clicked1:clicked = new clicked();


public function test3() {
clicked1.addEventListener("cancelForm",onClicked1);
addChild(clicked1);
}
private function onClicked1(event:TextEvent){
trace(event.text);
removeChild(clicked1);
}


}

}


[/PHPS]


کدهای کلاس clicked:

[PHPS]package { import flash.display.MovieClip;
import flash.events.MouseEvent;
import flash.events.TextEvent;

[Event(name="cancelForm",type="flash.events.TextEvent")]
public class clicked extends MovieClip{
private var btn1:btn = new btn();


public function clicked() {
btn1.x = 100;
btn1.y = 100;

btn1.addEventListener(MouseEvent.CLICK,onbtn1_CLICK);

addChild(btn1);
}
private function onbtn1_CLICK(event:MouseEvent){
var e:TextEvent = new TextEvent("cancelForm");
e.text = "salam";
dispatchEvent(e);
}


}

}


[/PHPS]

حالا وقتی من همین راه را در پروژه اصلی ام انجام میدم در خروجی چیزی نمایش داده نمیشه. انگار تابع .... در کلاس .... اصلا فراخوانی نمیشه. چرا؟؟؟

کلاس SearchItem

[PHPS]package Classes { import flash.display.MovieClip;
import flash.events.MouseEvent;
import flash.events.TextEvent;

[Event(name='addSearchItem',type='flash.events.TextEvent')]
public class SearchItem extends MovieClip{
public function SearchItem() {
...
searchItemList();
}
private function searchItemList(){
addChild(myMovie1);
...
for(var i:uint=0;i<array.length;i++){
...
myMovie1.addChild(subMenue);
myMovie1.addChild(essen_textField);
list_filtered.push(essen_textField);

Object(list_filtered).addEventListener(MouseEvent.CLICK,onFiltered);
}
}

private function onFiltered(event:MouseEvent){
...
for(var i:uint=0;i<array.length;i++){
...
if(essentiall == event.currentTarget.text){
var e:TextEvent = new TextEvent('addSearchItem');
e.text = arraySplit[2];
dispatchEvent(e);
trace("e.text: "+e.text);
}
}
}
}
}


[/PHPS]

کلاس PersonalListItem

[PHPS]package Classes { ...
import Classes.SearchItem;

public class PersonalListItem extends MovieClip{
...
private var itemCatNum:SearchItem = new SearchItem();
...


public function PersonalListItem(){
itemCatNum.addEventListener("addSearchItem",onItemCatNum);
}
private function onItemCatNum(event:TextEvent){
trace("event.text: "+event.text);
}
}
}


[/PHPS]

تا قبل تابع onItemCatNum تریس که میگیرم همه چیز طبق انتظارم هست ولی تریسی که درون این تابع هست هیچ خروجی ندارد انگار این تابع اصلا فراخوانی نمیشود. اشکالم کجاست؟؟
به نظرم میرسد به جای اینکه برم از روش های دیگری که دوستان معرفی می کنند همین روش را برم و اشکالم را برطرف کنم بهتر باشد. ممنون میشم راهنمایی کنید.
 
آخرین ویرایش:
سلام لطفا کمک کنید کلاس های مختلفی را برای این پروژه ام نوشتم حالا تو برقراری ارتباط بین اونها از طریق کلیک برخی دکمه هاش موندم. من کدهای پروژه ام را که فکر می کنم به این موضوع ارتباط داره به طرق مختلف تغییر دادم به هر شکلی که به فکرم می رسید ولی آخرش نفهمیدم که چرا در نمونه اولی جواب میگیرم و نتیجه کلیک در کلاس دیگه باعث تریس رشته ای در کلاس دیگم شده ولی در پروژه اصلی که هر چی نگاه می کنم عین همون راه را رفتم هیچ پاسخی دریافت نمی کنم.
اصلا انگار dispatchEvent(e); کار نمیکنه و هیچ رویدادی را پرتاب نمیکنه
انگار هیچ ارتباطی بین دو کلاسم از طریق رویداد
TextEvent برقرار نیست آخه اروری هم نمیده بفهمم چشه. دوستانی که تجربه دارند لطفا مقایسه کنند کجای کارم اشکال داره. کل پروژه ام می خوابه اگه نتونم بین رویدادهای کلیک در کلاسهای مختلف ارتباط برقرار کنم. زمان برام مهمه...
 
سلام
بالاخره حلش کردم
خیلی باهاش ور رفتم تا به ذهنم رسید تغییر پارامترهای شی textEvent را هم امتحان کنم شاید در عملکردش تاثیر داشته باشه. برای همین پارامتر bubbles اون را که false بود true کردم و درست شد.

[PHPS]

var e:TextEvent = new TextEvent("addPersonalItem",true);

[/PHPS]

حالا مشکلم فعلا حل شد ولی از دوستان کسی میدونه این پارامتر برای چیه و چه کار میکنه؟
البته با این تغییر فقط در کلاس اصلی میتونم از رویداد event ;i که dispatch شده نتیجه بگیرم. چرا در کلاسهای دیگه مشکل به قوه خودش باقیه؟
 

triton

کاربر فعال
سلام دوست عزیز
من کدها را دیدم و به نظر نمی رسه که مشکلی داشته باشه. من احتمال می دادم که اسامی که برای اعلان رویداد استفاه کردی که به صورت رشته هستند را اشتبه وارد کردی (این اشتباه متداول است) که میگی به تغییر bubbles درست شد.
bubbles یعنی "حباب"، یعنی رویداد مثل حباب زیر آب که همین طور بالا می یاد تا به سطح آب برسه ، رویداد ما هم همین طور بالا می یاد و توسط parent های سطح بالاتر قابل گوش دادن می شود که در حالت پیش فرض در همون مرحله اول این قابلیت cancle می شود و parentهای شئ پرتاب کننده رویداد نمی تونند به اون رویداد گوش بدهند.
فکر کنم که اگر فایل پروژه را برای تست بگذاری بهتر بتونیم کمکت کنیم.
 

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

بالا