【问题标题】:GWT: how to embed widgets in Anchor with UIBinderGWT:如何使用 UIBinder 在 Anchor 中嵌入小部件
【发布时间】:2011-07-04 22:21:56
【问题描述】:

我想在 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 小部件?你不能使用 s 或类似的元素来代替吗?
  • @Thomas- 我使用 InlineLabels 是因为我需要以编程方式更新它们。 InlineLabel 呈现为跨度。

标签: gwt uibinder


【解决方案1】:

下面的类的行为与 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);
    }
}

【讨论】:

    【解决方案2】:

    最好使用面板(流式或水平式)并将点击处理程序添加到面板以模拟链接。 Anchor、Button 和类似的小部件不允许在其中包含子标签。

    【讨论】:

    • 我最终将 ClickHandlers 直接添加到内联标签中。否则我需要将 Flow/Horizo​​ntalPanel 添加到 FocusPanel 中。唉,这应该更容易。
    • 我担心避免在我的 gwt 网站中使用锚元素,因为谷歌爬虫不了解我的网站结构。为什么允许 Anchor/Hyperlink 拥有小部件会有这么大的问题?
    • @DraškoKokić 我认为 GWT 不是制作页面而是应用程序。所以它不关心搜索引擎。
    猜你喜欢
    • 2011-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-28
    • 2012-08-04
    • 2016-05-14
    • 1970-01-01
    • 2011-02-08
    相关资源
    最近更新 更多