【问题标题】:GWT UiHandler for g:Anchor is not firingg:Anchor 的 GWT UiHandler 未触发
【发布时间】:2011-09-21 23:30:44
【问题描述】:

我基本上有一个菜单,您不能在其中单击标题,但是当您将鼠标悬停在菜单项上时,您可以从下拉元素中进行选择。每个元素都是 g:Anchor 标记,带有与之关联的 ui 字段。我期望发生的是,当用户单击其中一个下拉元素时,该字段的 uiHandler 会触发。即使在调试和断点的情况下,它也永远不会命中。

您将在下面找到代码中的主要关注领域。我只会在这里发布我的 gwt 导入,因为由于零错误,可以假设其余部分是正确的。

这是一个 XML sn-p 来了解发生了什么

<!DOCTYPE ui:UiBinder SYSTEM "http://dl.google.com/gwt/DTD/xhtml.ent">
<ui:UiBinder xmlns:ui='urn:ui:com.google.gwt.uibinder'
             xmlns:g='urn:import:com.google.gwt.user.client.ui'
             xmlns:cpcw='urn:import:org.collegeboard.pa.gwt.client.widget'>
    <cpcw:ExtendedHTMLPanel>
        <ul>
            <li ui:field="juniorHigh"><g:Anchor href="">Junior High</g:Anchor>
            <ul>
                <li><g:Anchor href="#" ui:field="juniorHighFall">Fall</g:Anchor></li>
                <li><g:Anchor href="#" ui:field="juniorHighSpring">Spring</g:Anchor></li>
                <li><g:Anchor href="#" ui:field="juniorHighSummer">Summer</g:Anchor></li>
            </ul>
        </li>
    </ul>
    </cpcw:ExtendedHTMLPanel>
</ui:UiBinder>

然后这是我的 Java 类中的片段

进口

import com.google.gwt.core.client.GWT;
import com.google.gwt.dom.client.LIElement;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.uibinder.client.UiBinder;
import com.google.gwt.uibinder.client.UiField;
import com.google.gwt.uibinder.client.UiHandler;
import com.google.gwt.user.client.ui.Anchor;

UI 字段

@UiField
protected LIElement juniorHigh;

@UiField
protected Anchor juniorHighFall;

@UiField
protected Anchor juniorHighSpring;

@UiField
protected Anchor juniorHighSummer;

UI 处理程序

@UiHandler({"juniorHighFall","juniorHighSpring","juniorHighSummer"})
public void handleMenuClick(ClickEvent event)
{
    DisplayUtil.displayAlertMessage(event.toString());
}

初始化

@Override
public void initializeBinder()
{
    initWidget(ourUiBinder.createAndBindUi(this));
}

现在,UiHandler 从未真正被击中。我有带和不带href的g:Anchor标签,并且还尝试将它们作为g:Hyperlink和g:Button但没有成功。就好像 UiHandler 根本不存在一样。

我们将不胜感激任何帮助,如果您觉得需要其他任何问题来解决问题,请告诉我!!

谢谢:-)

编辑:

为了确保清楚,包含此 ui.xml 文件的模板 ui.xml 文件将其放置在 div 中。当我用 SimplePanel 替换它时,一切都与 UiHandler 一起工作。

感谢您的回复!

【问题讨论】:

    标签: gwt


    【解决方案1】:

    默认情况下,这确实并且应该按照您的方式工作。

    我注意到了:

    • 您的代码引用了“ourUiBinder”
    • 您的控件包含在“ExtendedHTMLPanel”中

    这些看起来像自定义类 - 可能在这些实现中发生了一些奇怪的事情?

    也许您可以尝试将这些锚点包装在 SimplePanel 中并使用默认的 UiBinder,看看是否可行。如果是这样,很可能与您使用的任何自定义控件有关。如果没有,那么就会发生一些奇怪的事情——也许重启你的 IDE 等等。

    【讨论】:

    • 是的,它们是自定义类,我将开始深入研究它们,看看它们是否有什么奇怪的地方。感谢您对代码应该可以工作的保证,因为那把我逼到了墙角!我还将给 SimplePanel 一个机会,看看是否能解决问题!感谢您的回复!
    • 另外,我会赞成这个,但我在这里没有足够的声誉还没有这样做......(╯°□°)╯︵┻━┻
    • SimplePanel 成功了!在包含此 ExtendedHTMLPanel 的模板 xml 上,元素是 div。我将 div 更改为 SimplePanels,所有 UiHandler 都正常工作。我仍然没有足够的声誉来支持您的回答,但是谢谢! :)
    【解决方案2】:

    模板 xml 文件的每个视图都包含在一个 div 元素中。 Filip-fku 建议我查看 SimplePanels 以获取我发布的代码,这让我也去查看模板文件,看看它们根本不是 GWT 容器,它们是 div。一旦我将它们制作为 SimplePanel,我的 UiHandler 就会像魅力一样工作!

    谢谢 Filip-fku! g:SimplePanel FTW!!!

    【讨论】:

      猜你喜欢
      • 2011-02-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-06-23
      • 1970-01-01
      • 1970-01-01
      • 2011-03-27
      • 1970-01-01
      相关资源
      最近更新 更多