2014-12-26 2 views
2

GWT: 2.6.1
Я хотел бы выполнить действие при загрузке изображения (изображение src).GWT Image load handler

Я попытался это, но событие OnLoad никогда не стрелял:

final Image img = new Image(); 
    img.addLoadHandler(new LoadHandler() 
    { 

     @Override 
     public void onLoad(LoadEvent event) 
     { 
      //action 
     } 
    }); 

    img.setUrl("/image.png"); 

Тогда я попытался это:

final Image img = Image.wrap(Document.get().createImageElement()); 
    img.addLoadHandler(new LoadHandler() 
    { 

     @Override 
     public void onLoad(LoadEvent event) 
     { 
      //action 
     } 
    }); 

    img.setUrl("/image.png"); 

И это сработало ... Я не понимаю, почему первый код ничего не делать.

Важно: В этих двух примерах я не помещаю объект Image в dom (= Изображение не прилагается).

In this question, кажется, что причина в том, что изображение не прилагается. Но в моем втором примере кода изображение тоже не прикреплено? правильно ?

ответ

1

Если вы заглянули в документацию метода wrap(), то он говорит This element must already be attached to the document.. Итак, когда вы действительно проверяете источник wrap(), он вызывает onAttach(), который фактически регистрирует обработчики событий в элемент DOM. Поэтому разница в том, что объект Image думает, что элемент прикреплен, пока он не находится в этом состоянии.

Теперь, при входе в wrap(), есть утверждение, что проверка выполняется. Хотя вам нужно enable assertions, чтобы они были эффективными.

+0

Я не понимаю, почему мы должны прикреплять элемент для обработки события загрузки, потому что это не обязательство в Javascript .. – puglic