GWT gwtquery .live()方法可能存在错误

时间:2013-02-06 23:42:45

标签: gwt gwtquery

我正在尝试执行以下操作:

我想为某些链接添加一个特定的处理程序,用类表示。

$("a.link_list").live("click", new ListLinkHandler());

我需要.live()而不是.bind(),因为会生成新的此类链接。 (我知道jQuery的.live()已被弃用,而不是.on(),但gwt-query还没有.on()。)

我定义了这样的处理程序(就像the gwtquery example does):

public class ListLinkHandler extends Function {
    @Override
    public boolean f(Event e) { [...] }
}

但是,单击链接时从不调用处理程序方法。 我可以在Chrome开发工具中看到事件监听器:http://screencloud.net/v/bV5V。我认为它在body上,因为它是.live()

我尝试使用.bind(),但效果很好。 body事件监听器在a.link_list中发生了更改,处理程序执行了它应该执行的操作,但是(如文档所示,我没有测试)不是为新创建的链接。

我为.live()方法filed a bug,但也许我做错了。

另外,我不知道如何在没有gwtquery的情况下做到这一点,GWT似乎没有按类选择元素的方法,也不能不断地将监听器添加到新元素。

1 个答案:

答案 0 :(得分:0)

看起来你做错了什么,但我需要更多代码才能确定。你能发送完整的onModuleLoad代码来证明这种错误的行为吗?

我使用live编写了一个快速示例,它可以在Chrome和FF中添加新的gwt小部件或使用gquery的dom元素时使用

public void onModuleLoad() {
  $("a.link_list").live("click",  new ListLinkHandler());

  // Add a new link via gquery
  $("<a class='link_list' href=javascript:alert('href') onClick=alert('onClick')>Click </a>").appendTo(document);

  // Add a new link via gwt widgets
  Anchor a = new Anchor("click");
  a.setStyleName("link_list");
  a.addClickHandler(new ClickHandler() {
    public void onClick(ClickEvent event) {
      Window.alert("clickHandler");
    }
  });
  RootPanel.get().add(a);
}

public class ListLinkHandler extends Function {
  @Override
  public boolean f(Event e) {
    Window.alert("live");
    return true;
  }
}