2014-12-26 134 views
2

GWT:2.6.1
我想在加載圖像時執行動作(圖像src)。GWT圖像加載處理程序

這個我試過,但。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