我想将GWT JSO属性名定义为JSO中的常量,以避免拼写错误并受益于Eclipse代码完成,如下所示:
public final class MyJSO extends JavaScriptObject
{
/** here is the constant */
private static final String MY_CONST = "myPropName";
protected MyJSO() {
super();
}
public native void setMyProp(final boolean pFlag)
/*-{
this.@fully.qualified.MyJSO::MY_CONST = pFlag;
}-*/;
public native boolean isMyProp()
/*-{
if (this.hasOwnProperty(@fully.qualified.MyJSO::MY_CONST)) {
return this.@fully.qualified.MyJSO::MY_CONST;
} else {
return false;
}
}-*/;
}
GWT编译器应该能够在编译时替换常量中的String,这样以后对象作为Javascript存在就没有问题了。
但这是如此完全不工作,我想我可能是错的。有人能解释一下为什么吗?你有更好的想法来实现这个目标吗?
谢谢!
引用静态变量的正确语法是:
@fully.qualified.MyJSO::MY_CONST
不需要限定符(在您的示例中是this.
),因为变量是静态的。
如果你想用常量名来设置/获取JavaScript对象的属性,可以这样做:
public native void setMyProp(final boolean pFlag) /*-{
this[@fully.qualified.MyJSO::MY_CONST] = pFlag;
}-*/;
public native boolean isMyProp() /*-{
if (this[@fully.qualified.MyJSO::MY_CONST] != null) {
return this[@fully.qualified.MyJSO::MY_CONST];
} else {
return false;
}
}-*/;