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());
});
}-*/;
会起作用,但不知道原因,有人可以解释一下吗?
答案 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。