GWT:如何在UIBinder中将小部件嵌入Anchor?

8

我希望在UIBinder中使用以下内容,这样我就可以在我的代码中以编程方式设置链接的href

<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,但这样很丑陋。有更好的方法吗?


为什么你要使用InlineLabel小部件?难道你不能使用<span>或类似的元素吗? - Thomas Broyer
@Thomas- 我正在使用InlineLabels,因为我需要以编程方式更新它们。 InlineLabel呈现为一个span。 - George Armhold
2个回答

15

以下类的作用与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);
    }
}

6

最好使用面板(Flow或Horizontal)并添加点击处理程序以模拟链接。锚点、按钮和类似的小部件不允许在它们内部包含子标签。


最终我直接将ClickHandlers添加到内联标签中。否则我需要将Flow/HorizontalPanel添加到FocusPanel中。唉,这应该更容易些。 - George Armhold
我担心我的GWT网站中避免使用锚元素,因为Google爬虫无法理解我的网站结构。为什么允许Anchor/Hyperlink具有小部件会带来问题? - Draško Kokić
@DraškoKokić 我认为GWT不是用来制作页面而是应用程序。因此,它并不关心搜索引擎。 - Sebastian Piskorski

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接