2011-02-26 48 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); 
    } 
} 
相關問題