java - 让 JQuery 作用于 GWT 动态添加的类名

标签 java javascript jquery gwt

我正在尝试让 jquery 在使用 GWT 时为我做一些 ui 影响。我有添加到页面的通知,点击后应该会消失。由于可能有多个相同类型的通知(警告、错误等),我试图仅在通过 GWT 单击它们时才动态添加样式名称,然后让 jquery 对该特定类名称执行操作。

问题是 jquery 函数在添加样式名称之前触发,因此用户必须单击通知两次才能将其关闭。

有什么想法吗?

  public abstract class AbstractNotificationWidget extends Composite implements ClickHandler, HasClickHandlers {

  protected abstract String getUniqueId();

  @Override
  public HandlerRegistration addClickHandler(ClickHandler handler) {
    return addDomHandler(handler, ClickEvent.getType());
  }

  @Override
  public void onClick(ClickEvent event) {
    doClick(getUniqueId());
  }

  protected static native void doClick(String name) /*-{
    $wnd.$("#" + name).click(function () {
      $wnd.$(this).slideUp("slow");
      $wnd.$("div", this).fadeOut("slow");
      });
  }-*/;

}

然后我有扩展上述类的子类

public class ErrorNotificationWidget extends AbstractNotificationWidget {

  private final String uniqueId;

  public ErrorNotificationWidget (String title, String message) {
    uniqueId = DOM.createUniqueId();

    initWidget(uiBinder.createAndBindUi(this));

    this.getElement().setId(uniqueId);

    this.addClickHandler(this);
  }
  @Override
  protected String getUniqueId() {
    return this.uniqueId;
  }

这些子类使用 UIBinder 来确定它们应该如何绘制。然后将这些小部件添加到要显示的面板中。

最佳答案

您到底想达到什么目的?根据已应用的样式或它的 id 隐藏小部件? (在当前版本中,您似乎将一个与另一个混合在一起)

如果 ClickEvent 快速触发(可以通过在它之前添加超时来测试),您可以尝试将其包装在 DeferredCommand 中.

另一种可能性是 jQuery 正在崩溃 ;) 我在 jQuery/Mootools 中使用回调时遇到了一些奇怪的问题 - 原因是这些框架扩展/更改了 function() (除其他外) ) - 然而,JSNI 的东西是从一个“干净的”iframe 执行的,jQuery 没有做任何更改(这就是为什么你必须通过 $wnd 引用主窗口)。例如,您可以通过在您的主机 HTML 页面中定义一个测试函数,然后将其作为回调函数传递到您的 void doClick(String name) 方法中来测试这是否是这里的问题:

protected static native void doClick(String name) /*-{
  $wnd.$("." + name).click($wnd.jqueryTest); // BTW, why '"." + '?
}-*/;

我最初的建议仍然有效 - 使用 FocusPanel作为您的主要小部件 - 根据我的经验,尝试正确实现HasClickHandlers(和类似接口(interface))是一个 PITA,可能导致奇怪的错误和/或内存泄漏。

关于java - 让 JQuery 作用于 GWT 动态添加的类名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2284635/

相关文章:

javascript - 在显示页面加载之前隐藏 HTML 元素的正确方法是什么?

javascript - 能够通过 Postman 创建帐户,从 React 创建问题

javascript - 使用jquery动态扩展表

javascript - PHP中从ajax数组中获取数据

java - Maven 未拉下正确的 JClouds-Chef 依赖关系树

javascript - html5 : a good loading approach?

javascript - ajax调用成功时提交表单,ajax调用失败时阻止提交

java - Java 中 Math.pow() 背后的算法是什么

java - 在Java中插入和搜索大量数据

java序列化和继承