ActionScript 3.0 olay işleme, önceki sürümlerden nasıl farklılık gösterir

Flash Player 9 ve üstü, Adobe AIR 1.0 ve üstü

ActionScript 3.0'da olay işleme ile önceki ActionScript sürümlerinde olay işleme arasındaki en belirgin farklılık, önceki ActionScript sürümlerinde birçok farklı olay işleme sistemleri bulunurken, ActionScript 3.0'da olay işleme için yalnızca bir sistem bulunmasıdır. Bu bölüm, önceki ActionScript sürümlerinde olay işlemenin nasıl çalıştığına genel bakış ile başlar ve sonra ActionScript 3.0 için olay işlemenin nasıl değiştiğini ele alır.

Önceki ActionScript sürümlerinde olay işleme

ActionScript 3.0 öncesindeki ActionScript sürümleri, olayların işlenmesine yönelik birçok farklı yöntem sağlamıştır:

  • Doğrudan Button ve MovieClip örnekleri üzerinde yerleştirilebilen on() olay işleyicileri

  • Doğrudan MovieClip örnekleri üzerine yerleştirilebilen onClipEvent() işleyicileri

  • XML.onload ve Camera.onActivity gibi geri çağrı işlevi özellikleri

  • addListener() yöntemi kullanarak kaydettiğiniz olay dinleyicileri

  • Kısmı olarak DOM olay modelini uygulayan UIEventDispatcher sınıfı.

Bu mekanizmaların her biri, kendi avantaj ve sınırlama kümesini sunar. on() ve onClipEvent() işleyicilerinin kullanımı kolaydır ancak doğrudan düğmelerin ve film kliplerinin üzerine yerleştirilen kodun bulunması güç olduğundan, bu işleyiciler projelerin sonraki bakımını daha güç hale getirir. Geri çağrı işlevleri kolay uygulanabilir ancak sizi herhangi bir belirli olay için yalnızca bir geri çağrı işleviyle sınırlandırır. Olay dinleyicileri daha zor uygulanabilir, yalnızca bir dinleyici nesnesi ve işlevinin oluşturulmasını değil aynı zamanda olayı oluşturan nesneyle dinleyicinin kaydını da gerektirir. Ancak bu yüksek yük, birçok dinleyici nesnesi oluşturmanıza ve bunların tümünü aynı olay için kaydetmenize olanak sağlar.

ActionScript 2.0 bileşenlerinin geliştirilmesi de başka bir olay modeli oluşturmuştur. UIEventDispatcher sınıfına dahil edilen bu yeni model, DOM Olayları Belirtimi'nin bir alt kümesini esas almıştır. Bileşen olayı işleme konusunda bilgi sahibi olan geliştiriciler, yeni ActionScript 3.0 olay modeline geçiş sürecinde daha az zorluk yaşayacaktır.

Ne yazık ki, çeşitli olay modelleri tarafından kullanılan sözdizimi çeşitli şekillerde örtüşür ve çeşitli şekillerde farklılık gösterir. Örneğin, ActionScript 2.0'da TextField.onChanged gibi bazı özellikler, bir geri çağrı işlevi veya olay dinleyicisi olarak kullanılabilir. Ancak, dinleyici nesnelerini kaydetmeye yönelik sözdizimi, altı sınıf arasından, dinleyicileri mi yoksa UIEventDispatcher sınıfını mı destekleyeni kullandığınıza bağlı olarak farklılık gösterir. Key, Mouse, MovieClipLoader, Selection, Stage ve TextField sınıfları için, addListener() yöntemini kullanırsınız ancak bileşen olay işlemesi için addEventListener() adında bir yöntem kullanırsınız.

Farklı olay işleme modellerinin sunduğu başka bir karmaşıklık da, kullanılan mekanizmaya bağlı olarak geniş ölçüde değişiklik gösteren olay işleyici işlevinin kapsamıydı. başka bir deyişle, this anahtar sözcüğünün anlamı olay işleme sistemleri arasında tutarlı değildi.

ActionScript 3.0'da olay işleme

ActionScript 3.0, önceki dil sürümlerinde varolan birçok farklı olay işleme mekanizmalarının yerini alan tek bir olay işleme modelini sunar. Yeni olay modeli, Belge Nesnesi Modeli (DOM) Düzey 3 Olaylar Belirtimi'ni esas alır. SWF dosya biçimi özellikle Belge Nesnesi Modeli standardına bağlı olmasa da, DOM olay modelinin uygulanmasının mümkün olması için görüntüleme listesi ile DOM yapısı arasında yeterince benzerlik vardır. Görüntüleme listesindeki bir nesne, DOM hiyerarşik yapısındaki bir düğüme benzetilebilir ve görüntüleme listesi nesnesi ile düğüm terimleri de bu açıklama içinde birbirinin yerine kullanılabilir.

DOM olay modelinin Flash Player ve AIR uygulaması, varsayılan davranışlar adında bir kavram içerir. Varsayılan davranış , Flash Player veya AIR uygulamasının, belirli olayların normal sonucu olarak çalıştırdığı bir eylemdir.

Varsayılan davranışlar

Geliştiriciler genellikle olaylara yanıt veren kodlar yazmaktan sorumludur. Ancak bazı durumlarda bir davranış bir olayla o kadar yaygın şekilde ilişkilendirilmiştir ki, geliştirici davranışı iptal etmek için kod eklemediği sürece Flash Player veya AIR uygulaması davranışı otomatik olarak çalıştırır. Flash Player veya AIR otomatik olarak davranış sergilediğinden, bu davranışlar varsayılan davranışlar olarak bilinir.

Örneğin, kullanıcı bir TextField nesnesine metin girdiğinde, metnin TextField nesnesinde görüntülenmesi o kadar yaygındır ki, Flash Player ve AIR uygulamasında bu davranış yerleşik olarak bulunur. Bu varsayılan davranışın gerçekleşmesini istemiyorsanız, yeni olay işleme sistemini kullanarak bu davranışı iptal edebilirsiniz. Kullanıcı bir TextField nesnesine metin girdiğinde, Flash Player veya AIR, kullanıcı girdisini temsil etmek için TextEvent sınıfının bir örneğini oluşturur. Flash Player veya AIR uygulamasının, TextField nesnesinde metni görüntülemesini önlemek için, bu belirli TextEvent örneğine erişmeniz ve örneğin preventDefault() yöntemini çağırmanız gerekir.

Tüm varsayılan davranışlar engellenemez. Örneğin, kullanıcı TextField nesnesinde bir sözcüğü çift tıklattığında, Flash Player ve AIR bir MouseEvent nesnesi oluşturur. Bu önlenemeyen varsayılan davranış, imlecin altındaki sözcüğün vurgulanmasıdır.

Olay nesnelerinin birçok türü, ilişkilendirilmiş varsayılan davranışlara sahip değildir. Örneğin, bir ağ bağlantısı kurulduğunda Flash Player bir bağlanma olay nesnesi gönderir ancak bununla ilişkilendirilmiş bir varsayılan davranış yoktur. Event sınıfı ve alt sınıflarının API belgeleri her olay türünü listeler ve engellenebilir olsun veya olmasın tüm ilişkilendirilmiş davranışları açıklar.

Varsayılan davranışların yalnızca Flash Player veya AIR tarafından gönderilen olay nesneleriyle ilişkilendirildiğinin ve ActionScript üzerinden programlama yoluyla gönderilen olay nesneleri için var olmadığının anlaşılması önemlidir. Örneğin, textInput türünde bir olay nesnesi göndermek için EventDispatcher sınıfının yöntemlerini kullanabilirsiniz ancak bu olay nesnesi kendisiyle ilişkilendirilmiş varsayılan bir davranışa sahip olmaz. Başka bir deyişle, Flash Player ve AIR, programlama yoluyla gönderdiğiniz textInput olayının sonucunda TextField nesnesinde bir karakter görüntülemez.

ActionScript 3.0'daki olay dinleyicilerine yönelik yenilikler

ActionScript 2.0 addListener() yöntemini kullanma konusunda deneyimli geliştiriciler için, ActionScript 2.0 olay dinleyicisi modeli ile ActionScript 3.0 olay modeli arasındaki farklılıkların belirtilmesi yardımcı olacaktır. Aşağıdaki listede, iki olay modeli arasındaki önemli farklılıklar açıklanmaktadır:

  • ActionScript 2.0'da olay dinleyicileri eklemek için, bazı durumlarda addListener() yöntemini ve bazı durumlarda da addEventListener() yöntemini kullanırken, ActionScript 3.0'da tüm durumlarda addEventListener() yöntemini kullanırsınız.

  • ActionScript 2.0'da herhangi bir olay akışı yoktur, başka bir deyişle, addListener() yöntemi yalnızca olayı yayınlayan nesnede çağrılabilir, ActionScript 3.0'da ise olay akışının parçası olan herhangi bir nesnede addEventListener() yöntemi çağrılabilir.

  • ActionScript 2.0'da, işlevler, yöntemler veya nesneler olay dinleyicileri olabilirken, ActionScript 3.0'da yalnızca işlevler ya da yöntemler olay dinleyicileri olabilir.