GWT JSNI jquery,使用ui:field来选择回调中的元素不起作用

时间:2013-08-05 11:31:02

标签: gwt jsni

public class SettingMailPage {
    @UiField
    ButtonElement save;
    @UiField
    AnchorElement input;


    SettingMailPage()
    {
       bindActions(save.cast(),input.cast());
    }


    private native void bindActions(JavaScriptObject save, JavaScriptObject input)
    /*-{
          $wnd.$(save).click(function () {
            $wnd.alert($wnd.$(input).size());//always 0, why?
          });
    }-*/;
}

我想知道为什么绑定操作在回调时有效,它无法选择该元素,以及任何解决方法。感谢

编辑:

   private native void bindActions(JavaScriptObject save, JavaScriptObject input)
    /*-{
          var thatInput=input;
          $wnd.$(save).click(function () {
            $wnd.alert($wnd.$(thatInput).size());
          });
    }-*/;

会起作用,但不知道原因,有人可以解释一下吗?

1 个答案:

答案 0 :(得分:2)

在点击回调之前评估bindActions时,回调没有机会在传递给方法的状态下访问input

这样做的唯一方法是通过保持引用来锁定状态(就像你巧妙地做的那样),或者将整个绑定包装在一个闭包中(非常繁琐和多余),如下所示:

private native void bindActions(JavaScriptObject save, JavaScriptObject input) /*-{

    (function(in) {
        $wnd.$(save).click(function () {
            $wnd.alert($wnd.$(in).size());
        });
    })(input);
}-*/;

一切都与环境有关;请记住,在回调中,您指的是 功能所有者 (这是保存按钮)。请参阅主题的ridiculously famous article on quirksmode