2010-04-10 17 views
12

Bir etkinlik aldığım ilk kez bir GWT olay işleyicisini kaldırmak istiyorum. Ayrıca, gerçekten gerekli olmayan kayıt kayıt nesnelerini kullanarak sınıfımı kirletmekten kaçınmak istiyorum. Şu anda o kadar kodlanmış adres:GWT removeHandler ilk olay bildiriminde

final HandlerRegistration[] registrationRef = new HandlerRegistration[1]; 
registrationRef[0] = dialog.addFooHandler(new FooHandler() 
{ 
    public void onFoo(FooEvent event) 
    { 
     HandlerRegistration removeMe = registrationRef[0]; 
     if(removeMe != null) 
     { 
      removeMe.removeHandler(); 
     } 

     // do stuff here 
    } 
});

ama registrationRef kullanımı kodu daha az okunabilir hale getirir. Sınıfıma değişkenler eklemeden bunu yapmanın daha iyi bir yolu var mı?

cevap

11

Sadece kapsayan sınıfının bir saha HandlerRegistration nesne yapmak istiyorum, bu şekilde derleyici tarafından rahatsız edilmeyecek ve o diziler ve malzeme karıştırma daha "şık" var:

public class TestWidget extends Composite { 
    //... 

    HandlerRegistration handler; 

    public TestWidget() { 
     // ... 

     handler = button.addClickHandler(new ClickHandler() { 
      @Override 
      public void onClick(ClickEvent event) { 
       // ... 
       handler.removeHandler();     
      } 
     }); 
    } 

} 
+0

Evet, Teşekkürler. Sanırım bu sadece bir sınıftaki bu dinleyicilerinden birine sahip olduğunuzda (bu şekilde davranıyorsanız, keyfi bir dizi widget'ınız olduğunda işler daha da dağınık hale geliyor). Yeni bir alan eklemeden bunu yapmanın bir yolu olduğunu umuyordum. Oh iyi ... – Keith

+0

Bu göründüğü kadar düz olmayabilir. İşleyicinin onXXX() yönteminde null olarak ayarlandığı bir durum var. Niye ya? Çünkü GWT'nin işleyiciyi hemen çağırmasını engelleyecek bir şey yok. Örneğin, Image.onLoad() öğesindeki IE durumunda, görüntü zaten yüklenmişse, aslında addLoadHandler() çağrısı sırasında işleyiciyi çağırabilir. Bu durumda, düzeltmenin bir "null" kontrolünde sarılması ve daha sonra temizlik yapılması olduğunu gördüm. – John

+2

İşleyici birden çok kez eklenebilirse bu işe yaramıyor. – ubiquitousthey