Gwt ClickHandler不';jquery移动报头中的t fire&;页脚

Gwt ClickHandler不';jquery移动报头中的t fire&;页脚,gwt,jquery-mobile,Gwt,Jquery Mobile,经过几个小时的搜索和尝试,我决定在这里提问 JqmHeader.java public class JqmHeader extends ComplexPanel { public JqmHeader() { setElement(DOM.createDiv()); getElement().setAttribute("data-role", "header"); } public void add(Widget widget) {

经过几个小时的搜索和尝试,我决定在这里提问

JqmHeader.java

public class JqmHeader extends ComplexPanel {

    public JqmHeader() {
        setElement(DOM.createDiv());
        getElement().setAttribute("data-role", "header");
    }

    public void add(Widget widget) {
        super.add(widget, getElement());
    }
}
public class JqmPage extends ComplexPanel {
    ...

    public JqmPage(String id) {
        setElement(Document.get().createDivElement());
        getElement().setAttribute("data-role", "page");
        getElement().setAttribute("data-url", id);

        RootPanel.get().add(page);
        render(page.getId());
    }

    private native void render(String id) /*-{
        $wnd.$("#" + id).page();
    }-*/;

    ...
}
...

JqmHeader header = new JqmHeader();
Button b = new Button("TestButton");

b.addClickHandler(new ClickHandler() {
    @Override
    public void onClick(ClickEvent event) {
        Window.alert("TestButton clicked");
    }
});

header.add(b);
this.add(header);

...
JqmPage.java

public class JqmHeader extends ComplexPanel {

    public JqmHeader() {
        setElement(DOM.createDiv());
        getElement().setAttribute("data-role", "header");
    }

    public void add(Widget widget) {
        super.add(widget, getElement());
    }
}
public class JqmPage extends ComplexPanel {
    ...

    public JqmPage(String id) {
        setElement(Document.get().createDivElement());
        getElement().setAttribute("data-role", "page");
        getElement().setAttribute("data-url", id);

        RootPanel.get().add(page);
        render(page.getId());
    }

    private native void render(String id) /*-{
        $wnd.$("#" + id).page();
    }-*/;

    ...
}
...

JqmHeader header = new JqmHeader();
Button b = new Button("TestButton");

b.addClickHandler(new ClickHandler() {
    @Override
    public void onClick(ClickEvent event) {
        Window.alert("TestButton clicked");
    }
});

header.add(b);
this.add(header);

...
MyPage.java扩展了JqmPage.java

public class JqmHeader extends ComplexPanel {

    public JqmHeader() {
        setElement(DOM.createDiv());
        getElement().setAttribute("data-role", "header");
    }

    public void add(Widget widget) {
        super.add(widget, getElement());
    }
}
public class JqmPage extends ComplexPanel {
    ...

    public JqmPage(String id) {
        setElement(Document.get().createDivElement());
        getElement().setAttribute("data-role", "page");
        getElement().setAttribute("data-url", id);

        RootPanel.get().add(page);
        render(page.getId());
    }

    private native void render(String id) /*-{
        $wnd.$("#" + id).page();
    }-*/;

    ...
}
...

JqmHeader header = new JqmHeader();
Button b = new Button("TestButton");

b.addClickHandler(new ClickHandler() {
    @Override
    public void onClick(ClickEvent event) {
        Window.alert("TestButton clicked");
    }
});

header.add(b);
this.add(header);

...
我的问题

所以,我的问题是,标题栏中按钮的ClickHandler不会启动。如果我不将按钮添加到标题,而是添加到“RootPage”,如

,一切正常

我认为这必须取决于jquery移动头的实现。有什么解决办法/想法吗

来自柏林的感谢,
Alex

如果您想查看用于构建移动应用程序的纯GWT解决方案,您可以查看JQuery mobile将事件隐藏在标题上,以便它们不会传播到GWT。我在为jqm4gwt解决这个问题时做了什么(https://github.com/sksamuel/jqm4gwt)在页面级别上有一个通用侦听器,然后比较事件源。如果它是标题中的一个按钮,那么我会在按钮上手动触发该事件

请查看中的bindHeaderEvents

此外,jqm4gwt项目可能是一个很好的解决方案,可以帮助您避免自己发明所有这些小部件