我想在JSO中将GWT 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的对象没有问题。
但这完全不起作用,我想我可能错了。 :-)任何人都可以解释为什么?你有更好的想法如何实现这个目标吗?
谢谢!
答案 0 :(得分:4)
引用静态变量的correct syntax是:
@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;
}
}-*/;