Возможная ошибка с методом GWT gwtquery .live()

Я пытаюсь сделать следующее:

Я хочу добавить определенный обработчик для некоторых ссылок, обозначенных классом.

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

Мне нужно .live() вместо .bind(), потому что будут генерироваться новые такие ссылки. (Я знаю, что .live() jQuery устарел в пользу .on(), но gwt-query еще не имеет .on().)

Я определил обработчик следующим образом (так же, как пример gwtquery):

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

Однако метод обработчика никогда не вызывается, когда я нажимаю на ссылки. Я вижу прослушиватель событий в Chrome Dev Tools: http://screencloud.net/v/bV5V. Я думаю, что это на body, потому что это .live().

Я попытался использовать .bind(), и это сработало. Прослушиватель событий body изменился на a.link_list, и обработчик делает то, что он должен делать, но (как задокументировано, я не проверял) не для вновь созданных ссылок.

Я сообщил об ошибке для метода .live(), но, возможно, я м делаю что-то не так.

Кроме того, я понятия не имею, как это сделать без gwtquery, у GWT, похоже, нет ни метода выбора элементов по классу, ни постоянного добавления слушателя к новым элементам.


person Steven Roose    schedule 06.02.2013    source источник


Ответы (1)


Кажется, вы делаете что-то не так, но мне нужно больше кода, чтобы быть уверенным. Не могли бы вы прислать полный onModuleLoad код, демонстрирующий неправильное поведение?

Я написал быстрый пример с использованием live, и он работает либо при добавлении новых виджетов gwt, либо при добавлении элементов dom с помощью gquery как в Chrome, так и в FF.

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;
  }
}
person Manolo Carrasco Moñino    schedule 07.02.2013
comment
классный гзапрос! например, пример Маноло о возможности добавления поведения к виджетам gwt, которые будут добавлены в будущем. - person ; 08.02.2013
comment
Хорошо, дайте мне знать, могу ли я закрыть проблему на странице code.google. com/p/gwtquery/issues/detail?id=173. - person Manolo Carrasco Moñino; 13.02.2013