Olay nesneleriFlash Player 9 ve üstü, Adobe AIR 1.0 ve üstü Olay nesneleri, yeni olay işleme sisteminde iki ana amaca hizmet eder. Birincisi, olay nesneleri bir özellik kümesindeki belirli özellikler hakkındaki bilgileri saklayarak gerçek olayları temsil eder. İkincisi, olay nesneleri, olay nesnelerini işlemenize izin veren ve olay işleme sisteminin davranışını etkileyen bir özellik kümesi içerir. Bu özellik ve yöntemlere erişilmesini kolaylaştırmak için, Flash Player API'si, tüm olay nesneleri için temel sınıf görevi gören bir Event sınıfını tanımlar. Event sınıfı, tüm olay nesneleri için ortak olan ana bir özellik ve yöntem kümesi tanımlar. Bu bölüm Event sınıfı özelliklerinin ele alınmasıyla başlar, Event sınıfı yöntemlerinin açıklamasıyla devam eder ve neden Event sınıfının alt sınıflarının var olduğuna dair bir açıklamayla sona erer. Event sınıfının özelliklerini anlamaEvent sınıfı, bir olay nesnesi hakkında önemli bilgiler sağlayan birçok salt okunur özellik ve sabitleri tanımlar. Özellikle şunlar çok önemlidir:
Olay nesnesi türleriHer olay nesnesinin ilişkilendirilmiş bir olay türü vardır. Olay türleri dize değerleri olarak Event.type özelliğinde saklanır. Bir olay nesnesinin türünü bilmekte yarar vardır, böylece kodunuz farklı türlerdeki nesneleri ayırt edebilir. Örneğin, aşağıdaki kod, clickHandler() dinleyici işlevinin, myDisplayObject öğesine iletilen herhangi bir fare tıklatma olay nesnelerini yanıtlaması gerektiğini belirtir: myDisplayObject.addEventListener(MouseEvent.CLICK, clickHandler); Event sınıfı ile yirmi olay türü ilişkilendirilmiş olup bunlar Event sınıfı sabitleri tarafından temsil edilir ve bazıları aşağıdaki Event sınıfı tanımının alıntısında gösterilmektedir: package flash.events { public class Event { // class constants public static const ACTIVATE:String = "activate"; public static const ADDED:String= "added"; // remaining constants omitted for brevity } } Bu sabitler, belirli olay türlerini ifade etmenin kolay bir yolunu sağlar. Temsil ettikleri dizeleri kullanmak yerine bu sabitleri kullanmanız gerekir. Kodunuzda bir sabit adını yanlış yazarsanız, derleyici yanlışı yakalar ancak bunun yerine dizeleri kullanırsanız, derleme zamanında yazım hatası bildirilmeyebilir ve bu da hata ayıklaması yapılması zor olan beklenmeyen bir davranışa yol açabilir. Örneğin, bir olay dinleyicisi eklerken şu kodu kullanın: myDisplayObject.addEventListener(MouseEvent.CLICK, clickHandler); bunun yerine: myDisplayObject.addEventListener("click", clickHandler); Varsayılan davranış bilgileriKodunuz belirli bir olay nesnesi için varsayılan davranışın engellenip engellenemeyeceğini cancelable özelliğine erişerek kontrol edebilir. cancelable özelliği, varsayılan bir davranışın önlenip önlenemeyeceğini belirten bir Boolean değerini içerir. preventDefault() yöntemini kullanarak, az sayıda olayla ilişkilendirilmiş varsayılan bir davranışı engelleyebilir veya iptal edebilirsiniz. Daha fazla bilgi için, bkz. Varsayılan olay davranışını iptal etme, Event sınıfının yöntemlerini anlama. Olay akışı bilgileriKalan Event sınıfı özellikleri, aşağıdaki listede açıklandığı gibi, olay nesnesi ve olay nesnesinin olay akışıyla ilişkisi hakkında önemli bilgiler içerir:
bubbles özelliğiBir olayın olay nesnesi, olay akışının köpürme aşamasına katılıyorsa, başka bir deyişle, olay nesnesi, Sahne Alanı'na ulaşıncaya kadar üst öğeleri üzerinden hedef düğümden geri iletiliyorsa, o olayın köpürdüğü söylenebilir. Event.bubbles özelliği, olay nesnesinin köpürme aşamasına katılıp katılmadığını belirten bir Boolean değerini saklar. Köpüren tüm olaylar ayrıca yakalama ve hedef aşamalarına da katıldığından, köpüren tüm olaylar, olay akışı aşamalarının üçüne de katılır. Değer true olursa, olay nesnesi üç aşamanın tamamına katılır. Değer false olursa, olay nesnesi köpürme aşamasına katılmaz. eventPhase özelliğieventPhase özelliğini inceleyerek herhangi bir olay nesnesinin olay aşamasını belirleyebilirsiniz. eventPhase özelliği, olay akışının üç aşamasından birini temsil eden işaretsiz bir tam sayı değeri içerir. Flash Player API'si, aşağıdaki kod alıntısında gösterildiği gibi, üç işaretsiz tam sayı değerine karşılık gelen üç sabiti içeren ayrı bir EventPhase sınıfını tanımlar: package flash.events { public final class EventPhase { public static const CAPTURING_PHASE:uint = 1; public static const AT_TARGET:uint = 2; public static const BUBBLING_PHASE:uint= 3; } } Bu sabitler, eventPhase özelliğinin üç geçerli değerine karşılık gelir. Kodunuzu daha okunaklı hale getirmek için bu sabitleri kullanabilirsiniz. Örneğin, yalnızca olay hedefi, hedef sahne alanı üzerinde olduğunda myFunc() adında bir işlevin çağrılmasını sağlamak istiyorsanız, bu koşulu test etmek için şu kodu kullanabilirsiniz: if (event.eventPhase == EventPhase.AT_TARGET) { myFunc(); } target özelliğitarget özelliği, olayın hedefi olan nesneye bir başvuru içerir. Bazı durumlarda bu olabildiğince nettir, örneğin, mikrofon etkin hale geldiğinde, olay nesnesinin hedefi Microphone nesnesidir. Ancak hedef, görüntüleme listesindeyse, görüntüleme listesi hiyerarşisinin dikkate alınması gerekir. Örneğin, kullanıcı, örtüşen görüntüleme listesi nesneleri içeren bir noktaya fare tıklatması girerse, Flash Player ve AIR uygulaması, olay hedefi olarak her zaman Sahne Alanı'nın en uzağında bulunan nesneyi seçer. Karmaşık SWF dosyaları için, özellikle de içindeki düğmelerin rutin olarak daha küçük alt nesnelerle süslendiği SWF dosyaları için, target özelliği genellikle düğme yerine düğmenin alt nesnesini işaret ettiği için, bu özellik sık kullanılmaz. Bu durumlarda en yaygın uygulama, düğmeye olay dinleyicileri eklenmesi ve target özelliği düğmenin alt öğesini işaret edebilirken currentTarget özelliği düğmeyi işaret ettiğinden bu ikinci özelliğin kullanılmasıdır. currentTarget özelliğicurrentTarget özelliği, geçerli olarak olay nesnesini işleyen nesneye bir başvuruyu saklar. İncelediğiniz olay nesnesini geçerli olarak hangi düğümün işlediğinin bilinmesi garip görünse de, o olay nesnesinin olay akışında herhangi bir görüntüleme nesnesine dinleyici işlevi ekleyebileceğinizi ve dinleyici işlevinin herhangi bir konuma yerleştirilebileceğini unutmayın. Üstelik aynı dinleyici işlevi farklı görüntüleme nesnelerine eklenebilir. Projenin boyutu ve karmaşıklık düzeyi arttıkça, currentTarget özelliği çok daha fazla kullanışlı hale gelir. Event sınıfının yöntemlerini anlamaEvent sınıfı yöntemleri üç kategoriye ayrılır:
Event sınıfı yardımcı program yöntemleriEvent sınıfında iki yardımcı program yöntemi vardır. clone() yöntemi bir olay nesnesinin kopyalarını oluşturmanızı sağlar. toString() yöntemi, bir olay nesnesinin değerleriyle beraber özelliklerinin dize olarak temsilini oluşturmanızı sağlar. Bu yöntemlerin ikisi de olay modeli sistemi tarafından dahili olarak kullanılır ancak genel kullanım için geliştiricilere sunulmuştur. Event sınıfının alt sınıflarını oluşturan ileri düzey geliştiriciler için, olay alt sınıfının düzgün çalışmasını sağlamak için her iki yardımcı program yönteminin sürümlerini geçersiz kılmanız ve uygulamanız gerekir. Olay akışını durdurmaBir olay nesnesinin olay akışında yoluna devam etmesini önlemek için Event.stopPropagation() yöntemini veya Event.stopImmediatePropagation() yöntemini çağırabilirsiniz. Neredeyse aynı olan ve yalnızca geçerli düğümün diğer olay dinleyicilerinin çalıştırılmasına izin verilip verilmediğine göre değişiklik gösteren iki yöntem vardır:
Bu yöntemlerden herhangi birinin çağrılması, bir olayla ilişkilendirilmiş varsayılan davranışın gerçekleşip gerçekleşmemesi üzerinde herhangi bir etki yaratmaz. Varsayılan davranışı önlemek için Event sınıfının varsayılan davranış yöntemlerini kullanın. Varsayılan olay davranışını iptal etmeVarsayılan davranışın iptal edilmesine yönelik iki yöntem, preventDefault() yöntemi ve isDefaultPrevented() yöntemidir. Bir olayla ilişkilendirilen varsayılan davranışı iptal etmek için preventDefault() yöntemini çağırın. Bir olay nesnesinde preventDefault() öğesinin önceden çağrılmış olup olmadığını kontrol etmek için, isDefaultPrevented() yöntemini çağırın, bu yöntem önceden çağrılmışsa true değeri, aksi takdirde false değeri döndürülür. Yalnızca olayın varsayılan davranışı iptal edilebiliyorsa preventDefault() yöntemi çalışır. Bu olay türünün API belgelerine başvurarak veya olay nesnesinin cancelable özelliğini incelemek için ActionScript'i kullanarak bu şekilde olup olmadığını kontrol edebilirsiniz. Varsayılan davranışın iptal edilmesi, olay akışı boyunca olay nesnesinin ilerlemesi üzerinde herhangi bir etki yaratmaz. Bir olay nesnesini olay akışından kaldırmak için, Event sınıfının olay akışı yöntemlerini kullanın. Event sınıfının alt sınıflarıBirçok olay için, Event sınıfında tanımlanan ortak özellik kümesi yeterlidir. Ancak diğer olaylar, Event sınıfında kullanılabilir özellikler tarafından yakalanamayan benzersiz özelliklere sahiptir. Bu olaylar için, ActionScript 3.0, Event sınıfının birçok alt sınıfını tanımlar. Her alt sınıf, ilgili olay kategorisi için benzersiz olan ek özellikler ve olay türleri sağlar. Örneğin, fare girdisiyle ilgili olaylar, Event sınıfında tanımlı özellikler tarafından yakalanamayan birçok benzersiz özelliğe sahiptir. MouseEvent sınıfı, fare olayının konumu ve fare olayı sırasında belirli tuşlara basılmış olup olmadığı gibi bilgileri içeren on özellik ekleyerek Event sınıfını genişletir. Event alt sınıfı ayrıca alt sınıfla ilişkilendirilmiş olay türlerini temsil eden sabitleri de içerir. Örneğin, MouseEvent sınıfı click, doubleClick, mouseDown ve mouseUp olay türleri de dahil olmak üzere birçok fare olayı türü için sabitleri tanımlar. Olay nesneleri altındaki Event sınıfı yardımcı program yöntemleri bölümünde açıklandığı gibi, Event alt sınıfı oluştururken, alt sınıfa özgü işlevsellik sağlamak için clone() ve toString() yöntemlerini geçersiz kılmanız gerekir. |
|