2014-12-26 95 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