2011-02-26 77 views
8

我想在UIBinder中使用以下代码,以便我可以通过编程方式在代码中设置链接的hrefGWT:如何使用UIBinder在Anchor中嵌入小部件

<g:HTMLPanel> 
    <g:Anchor ui:field="link"> 
     <g:InlineLabel ui:field="firstName"/> 
     <g:InlineLabel ui:field="lastName"/> 
    </g:Anchor> 
</g:HTMLPanel> 

当我尝试这样我得到:

ERROR: Found widget in an HTML context Element <g:InlineLabel ui:field='firstName'> (:7). 

如何能够将锚内部部件?以前我使用过:

<a id="myAnchor"> 
    etc... 
    </a> 

然后在我的代码中操纵DOM来设置HREF,但那很丑。有没有更好的办法?

+0

为什么使用InlineLabel小部件?你不能使用或类似的元素吗? – 2011-03-01 23:18:26

+0

@ Thomas-我正在使用InlineLabels,因为我需要以编程方式更新它们。 InlineLabel呈现为一个跨度。 – 2011-04-08 17:01:00

回答

6

最好使用Panel(流或水平)并将点击处理程序添加到面板以模拟链接。锚点,按钮和类似的小部件不会允许其中的子标签。

+0

我最终直接将ClickHandlers添加到内联标签。否则,我需要将Flow/Horizo​​ntalPanel添加到FocusPanel中。叹息,这应该更容易。 – 2011-02-26 18:26:59

+0

我很担心在我的gwt网站中避免锚元素,因为谷歌爬虫不了解我的网站结构。为什么它允许锚/超链接具有小部件是如此问题? – 2011-12-14 11:41:09

+0

@DraškoKokić我认为GWT不是要制作页面,而是应用程序。所以它不关心搜索引擎。 – 2014-12-14 14:52:22

14

下面的类完全像一个SimplePanel(即,您可以在其中放置一个小部件),但使用“a”而不是“div”。如果你需要更多的小部件,只需在其中放置另一个面板。

import com.google.gwt.user.client.DOM; 
import com.google.gwt.user.client.ui.SimplePanel; 

public class Link extends SimplePanel { 
    public Link() { 
     super(DOM.createAnchor()); 
    } 

    private void setHref(String href) { 
     getElement().setAttribute("href", href); 
    } 

    private String getHref() { 
     return getElement().getAttribute("href"); 
    } 

    public void setTarget(String frameName) { 
     getElement().setAttribute("target", frameName); 
    } 
}