GWT Özel Olaylar
Hey bir sorun, özel GWT olay İşleyicileri nasıl etrafında başımı almak zorundayım. Bu konu hakkında oldukça çok şey okudum ve hala Sisli nedir biraz. Burada ipler bu GWT Custom Event Handler gibi Stackoverflow üzerinde okudum. Birisi aşağıdaki gibi uygulanan bir mannar bunu açıklayabilir.
2 sınıflar bloğu ve adam bir Dersim var. Adam olay harekete bloğu ile çarpıştı (() onCollision ) ve daha sonra block sınıfı için bu olayı dinler.
Teşekkürler
CEVAP
Genel olarak olaylar:
Olaylar her zaman bir şey (örneğin durum değişikliği) hakkında bilgilendirmek için gönderilir. Hadi bir adamla seni örnek alıp bir duvar. Burada bir kullanıcı bir labirent içinde bir adam olarak dolaşabileceği bir oyun olduğunu hayal edebiliriz. Her zaman bir kullanıcı için (örneğin, bir duvar yıkılmış bir duvar olarak kendini işleyebilen) tepki böylece çarpışma hakkında bilgi sahibi olmalıdır duvara toslayacaktır. Bu çarpışma olayı bir duvar ile çarpışma algılanır her zaman göndererek elde edilebilir. Bu olay bir adam tarafından gönderilir ve sistem olay ile ilgilenen her nesneyi alır ve ona göre tepki verebilir. Olayları almak için hangi nesneleri, olay ile ilgili olarak kendilerini kayıt olmalısınız.
Bu olaylar her sistem veya çerçeve içinde genel olarak (sadece GWT) nasıl çalışır. Ve bu sistemlerde olayları göndermek ve almak için tanımlamak gerekir:
- Ne gönderilir (olaylar gibi)
- (Olay alıcıları) alır
- (Olay gönderenler) gönderir
Sonra:
- Olayları almak istiyorum hangi olay alıcıları kaydedin
- Olaylar gönderin
GWT: olaylar
Burada GWT özel olayları kullanarak bir örnek göstereceğim. Bir posta kutusu kontrol etmek için gerekli olan örnek bir sistemi kullanmak ve eğer yeni mail varsa orada bir kullanıcı bilgilendireceğim. Hadi sisteminde en az 2 bileşeni vardır varsayalım:
- mesaj denetleyicisi sorumlu posta kutusunu kontrol ediyorum
- mesajı yeni postaları görüntülemek için displayer sorumlu
Mesaj denetleyicisi yeni bir posta ve mesaj displayer bu olaylar aldığında olaylar gönderir.
Adım 1: olayları Tanımlamak
Yeni bir posta hakkında bilgi MessageReceivedEvent
sınıfının bir örneği olarak gönderilecektir. Sınıfa yeni bir posta sadelik String
sadece öyle olduğunu farz edelim) içerir.
Bu sınıfın tam kaynak kodu (kaynak kodu aşağıda olduğu için açıklama) sundu.
public class MessageReceivedEvent extends GwtEvent<MessageReceivedEventHandler> {
public static Type<MessageReceivedEventHandler> TYPE = new Type<MessageReceivedEventHandler>();
private final String message;
public MessageReceivedEvent(String message) {
this.message = message;
}
@Override
public Type<MessageReceivedEventHandler> getAssociatedType() {
return TYPE;
}
@Override
protected void dispatch(MessageReceivedEventHandler handler) {
handler.onMessageReceived(this);
}
public String getMessage() {
return message;
}
}
MessageReceivedEventHandler
olay alıcıları temsil eden bir arayüz. Şu anda bunu dert etmeyin, bu daha sonra ele alınacaktır.
Her sınıf GWT bir olayı temsil GwtEvent
sınıf genişletmek için vardır. Bu sınıf, uygulanması gereken iki soyut yöntemler içerir: getAssociatedType
dispatch
. Her olay sınıfı içinde, ancak genellikle çok benzer bir şekilde uygulanır.
Sınıf alınan mesajı (kurucu) hakkında bilgi saklar. Her olay alıcısı getMessage
yöntem geçebilirler.
Adım 2: olay alıcıları Tanımlamak
GWT her olay türü bir arabirim bu olay türü alıcıları temsil eden ilişkilidir. GWT alıcılar işleyicileri denir. Örnekte MessageReceivedEvent
bir olay alıcı arabirimi MessageReceivedEventHandler
basamaktır. Kaynak kodu aşağıda:
public interface MessageReceivedEventHandler extends EventHandler {
void onMessageReceived(MessageReceivedEvent event);
}
Her işleyici EventHandler
arayüzü genişletmek için vardır. Ayrıca, bir olay gerçekleştiğinde çağrılacak yöntemi (en az bir parametre bir olay sürer) tanımlamak gerekir. Burada yöntemi onMessageReceived
olarak adlandırılır. Her alıcı bu yöntemi uygulayarak bir olay üzerine tepki verebilir.
Örnekte sadece olay alıcı MessageDisplayer
bileşen
public class MessageDisplayer implements MessageReceivedEventHandler {
@Override
public void onMessageReceived(MessageReceivedEvent event) {
String newMessage = event.getMessage();
// display a new message
// ...
}
}
Adım 3: olay gönderenler Tanımlayın
Örnekte sadece olay Gönderen bileşen - EventChecker
kontrol postaları sorumludur:
public class MessageChecker implements HasHandlers {
private HandlerManager handlerManager;
public MessageChecker() {
handlerManager = new HandlerManager(this);
}
@Override
public void fireEvent(GwtEvent<?> event) {
handlerManager.fireEvent(event);
}
public HandlerRegistration addMessageReceivedEventHandler(
MessageReceivedEventHandler handler) {
return handlerManager.addHandler(MessageReceivedEvent.TYPE, handler);
}
}
Her olay Gönderen HasHandlers
arabirim uygulamak için vardır.
En önemli unsur burada HandlerManager
bir alandır. GWT adı olarak HandlerManager
olay işleyicileri (event alıcıları) yönetir öneririz. Başta da denildiği gibi olayları almak isteyen her olay alıcısı ilgi olarak kaydetmeniz gerekir. Bu işleyici yöneticileri içindir. Mümkün olan her kayıtlı olay işleyici için belirli bir olay gönderebilirler olay işleyicileri kayıt yapıyorlar.
HanlderManager
oluşturulduğunda onun yapıcı bir tartışma sürüyor. Her olay kökenli bir kaynağı vardır ve bu parametre, tüm bu olaylar işleyicisi yöneticisi ile göndermek için bir kaynak olarak kullanılacaktır. Olayların kaynağı olarak this
Bu örnekte MessageChecker
.
Yöntemi fireEvent
HasHandlers
arabirimi olarak tanımlanan ve olayları göndermek için sorumludur. Gördüğünüz gibi sadece işleyicisi yöneticisi (yangın) ve olay göndermek için kullanır.
addMessageReceivedEventHandler
olay alıcıları tarafından kendilerini olayları alıcı olarak ilgilenen kaydetmek için kullanılır. Yine işleyicisi yöneticisi bunun için kullanılır.
Adım 4: olay gönderenler ile Bağlama olayı alıcıları
Her şey tanımlandığında olay alıcıları olay gönderenler kendilerini kayıt olmalısınız. Bu genellikle nesnelerin oluşturulması sırasında yapılır:
MessageChecker checker = new MessageChecker();
MessageDisplayer displayer = new MessageDisplayer();
checker.addMessageReceivedEventHandler(displayer);
Şimdi tüm olayları checker
tarafından gönderilen displayer
tarafından alınır.
Adım 5: olaylar Gönderin
Olay, MessageChecker
göndermek için bir olayı örnek oluşturmak ve fireEvent
yöntemi kullanarak göndermeniz gerekir. Bu kamışı newMailReceived
yöntem yapılması:
public class MessageChecker implements HasHandlers {
// ... not important stuff omitted
public void newMailReceived() {
String mail = ""; // get a new mail from mailbox
MessageReceivedEvent event = new MessageReceivedEvent(mail);
fireEvent(event);
}
}
Açık ve yardım:) umuyorum
Açısal-uı özel olaylar hakkında ipuçla...
JQuery özel olaylar?...
404 Dönen 200 OK Yerine 404 Bulunamadı...
Vs GetView. Özel bir CursorAdapter yıl...
Görünüm OAuth token ile özel video Vim...