2016-03-21 20 views
2

Şu anda bir GWT projesi üzerinde çalışıyorum. Birden çok sayfa arasında paylaşılan ortak bir bloğum var. Bu ortak blokta bazı işlem düğmelerim var ve sayfalarda bu eylem düğmelerinin tıklanmasıyla başlatılan etkinlik için bir işleyici var.GWT - Aynı olay için birden fazla işleyici nasıl kullanılır

Karşılaştığım sorun, Sayfa A'daki bu eylem düğmelerinden birine tıkladığımda, önceden B sayfasındaki işleyicinin önceden kaydedilmiş olması gerektiğidir.

Bu yüzden düşündüğüm çözüm, işleyiciyi bir sayfadan çıkardığımızda kaldırmamız gerektiğinden, aynı eylem düğmesi olayına kayıtlı bir işleyici ile aynı anda yalnızca bir sayfa olacaktı. İlk

, ben eylem düğmesi tıklama olaylara kayıt ve HandlerRegistration nesne AddHandler yöntemi dönen kaydedin:

HandlerRegistration actionButtonClickEventHandlerRegistration=eventBus.addHandler(CommonBlockActionButtonClickedEvent.TYPE, someHandler);

Ve sonra, sayfa değişikliği etkinliğinde, ben önceden kaydedilmiş HandlerRegistration nesne

den RemoveHandler diyoruz

: Uygulamamı lauch ve bu sayfaların iki giderken
eventBus.addHandler(PageChangeEvent.TYPE, new PageChangeEventHandler() { 
    @Override 
    public void onMainPageChange(PageChangeEvent event) { 
     actionButtonClickEventHandlerRegistration.removeHandler(); 
    } 
}); 

yüzden dışında her sayfalarda bunu, bu hatayı alıyorum

Bu hatayı neden aldığımı veya sorunumu çözmenin başka bir yolunu biliyor musunuz?

Çok teşekkürler!

cevap

1

İşleyici kaldırıldıktan sonra null olarak ayarlanır ve kaldırmadan önce gerçekten boş olup olmadığını kontrol eder. Bunun gibi :

eventBus.addHandler(PageChangeEvent.TYPE, new PageChangeEventHandler() { 
    @Override 
    public void onMainPageChange(PageChangeEvent event) { 
     if(actionButtonClickEventHandlerRegistration != null) { 
      actionButtonClickEventHandlerRegistration.removeHandler(); 
      actionButtonClickEventHandlerRegistration = null; 
     } 
    } 
}); 

Yine en az iki kez işleyicisi kaldırmak gibi görünüyor ve bunun için program mantığı kontrol etmelidir.

Bunu yapmanın iyi bir yolu, işleyiciyi kaldırma satırındaki hata ayıklayıcıda (tarayıcınızın) bir kesme noktası belirlemektir. Her çağrı için çağrı yığına bakarsanız, yinelenen aramayı tespit edip düzeltmeniz gerekir.

İlgili konular