GWT UiHandler for g:Anchor没有开火

时间:2011-09-21 23:30:44

标签: gwt

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

您将在下面找到代码中主要关注的方面。我只会在这里发布我的gwt导入,因为可以假设其余的都是正确的,因为没有错误。

这是一个XML片段,可以了解正在发生的事情

<!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 Fields

@UiField
protected LIElement juniorHigh;

@UiField
protected Anchor juniorHighFall;

@UiField
protected Anchor juniorHighSpring;

@UiField
protected Anchor juniorHighSummer;

Ui Handler

@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:超链接和g:按钮没有成功。好像UiHandler不在那里。

非常感谢任何帮助,如果您觉得还需要其他任何疑问,请告诉我们!

谢谢: - )

编辑:

为了确保这一点很明确,包含此ui.xml文件的模板ui.xml文件将其放在div中。当我用SimplePanel替换它时,一切都与UiHandler一起使用。

感谢您的回复!

2 个答案:

答案 0 :(得分:6)

默认情况下,这样做并且应该正常工作。

我注意到了:

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

这些似乎是自定义类 - 在这些实现中可能会出现一些时髦的东西?

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

答案 1 :(得分:2)

Template xml文件的每个视图都包含在div元素中。 Filip-fku建议我查看SimplePanels以获取我发布的代码,这让我看看模板文件,看看它们根本不是GWT容器,它们是div。一旦我将它们变成SimplePanels,我的UiHandlers就像一个魅力!

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