2008-09-17 31 views
1

GWT'deki widget'lar, kendilerini yenilemek veya başka bir işlem gerçekleştirmek için diğer widget'leri nasıl bilgilendirmelidir?Diğer widget (ler) i bildiren widget

sinkEvent/onBrowserEvent kullanmalı mıyım? Ve eğer öyleyse özel Etkinlikler oluşturmak için bir yolu var mı?

cevap

3

Bu sorunu Observer Pattern ve merkezi bir Controller kullanarak çözdüm. Merkezi denetleyici, uygulamadaki tüm parçacıkların bilgisine sahip olan ve birbirine uyma biçimlerini belirleyen tek sınıftır. Birisi widget A'da bir şeyi değiştirirse, widget A bir olayı tetikler. Eventhandler'da merkezi denetleyiciyi, merkezi denetleyiciyi (ve isteğe bağlı olarak başkalarını, ancak basitlik için bunu yapmayacağım), belirli bir eylemin ('MyEvent' enum örneğini geçirerek) bilgilendiren 'notifyObservers()' çağrısı aracılığıyla çağırırsınız.) Meydana geldi.

Böylelikle, uygulama akış mantığı tek bir merkezi sınıfta yer alır ve widget'lar birbirleriyle ilgili referanslardan oluşan bir spagetti gerektirmez. Yani burada

+0

Yaptığım gibi aynı çözüme geldiniz. SendNotification ilk önce denemek, recieveNotification mekanizması karmaşık bir çok şey alacaktı. Gözlemci modeli mükemmel uyuyor ve merkezi bir kontrolör daha mantıklı. – Drejc

3

Çok açık uçlu bir soru - örneğin, kendi widget'larınız kendilerini hangi abonelere abone olacaksınız? örneğin: customEventHandler her adlandırılmış olay abone tüm widget'lar izler ve sonra istediğiniz ek yöntemler diyebiliriz adlı sınıf, üzerinde güncelleme yöntemini çağıran

Class newMessageHandler { 
    void update(Widget caller, Widget subscriber) { 
     ... 
    } 
} 

customEventHandler.addEventType("New Message", newMessageHandler); 

Widget w; 
customEventHandler.subscribe(w, "New Message"); 

... 
Widget caller; 

// Fire "New Message" event for all widgets which have 
// subscribed 
customEventHandler.fireEvent(caller, "New Message"); 

. Yok ediciden aboneliğinizi iptal etmek isteyebilirsiniz - ancak istediğiniz kadar fantezi yapabilirsiniz.

+0

Bu aklımda olan şey için işe yarayabilir, kesinlikle denemelisiniz. – Drejc

1

benim (örnek) uygulaması, ilk en yeni etkinlik yapalım: Şimdi uygulayan bir widget varsa

import com.google.gwt.user.client.EventListener; 

public interface NotificationHandler extends EventListener { 
    void onNotification(NotificationEvent event); 
} 

:

import java.util.EventObject; 
import com.google.gwt.user.client.ui.Widget; 

public class NotificationEvent extends EventObject { 
    public NotificationEvent(String data) { 
     super(data); 
    } 
} 

Sonra bir olay işleyicisi arabirimi oluşturmak NotificationHanlder, numaralı telefonu arayarak olayı tetikleyebiliriz:

((NotificationHandler)widget).onNotification(event);