我试图让jquery在使用GWT时对我造成一些影响。我有添加到页面的通知,点击时应该消失。由于可能有多个相同类型的通知(警告,错误等),我试图动态添加一个样式名称,只有当它们通过GWT单击时,然后让jquery按照该特定类名称操作。获取JQuery作用于由GWT动态添加的类名称
问题是,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的确定应该如何绘制的子类。然后将这些小部件添加到要显示的面板中。
您能否提供更多的源代码 - 您发布的部分不完全足以查看发生了什么问题。你也许想把'styleName.equals'改成'styleName.contains';)另外,使用'FocusPanel'作为你的'mainWidget'可能比自己处理'ClickHandler'注册要容易一些:)而且你可能想要切换到DOM.createUniqueId()的命名通知小部件(我认为其中有一些) - 你不会一次隐藏所有的小部件;) – 2010-02-17 23:55:34
感谢您的评论。这绝不是最终的代码,所以肯定有一些清理,但包含的想法是一个很好的。 DOM.createUniqueId()方法也可能是一个好主意,但是如果小部件在第一次点击时关闭,那么这并不重要。 我不知道我可以发布更多的代码。我有扩展这一个的子类,并添加他们自己的样式,使它们看起来像一个错误或警告。 虽然我会用最新版本的代码来编辑我的帖子。 – Josh 2010-02-18 00:39:36
我添加了更多代码。创建通知实例时,我开始添加唯一标识,但仍需要2次点击。我必须失去一些明显的东西。 – Josh 2010-02-18 14:10:10