3

我想将 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 存在的对象没有问题。

但这完全行不通,我想我可能错了。:-) 谁能解释为什么?你有更好的想法如何实现这一目标?

谢谢!

4

1 回答 1

4

引用静态变量的正确语法是:

@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;
    }
}-*/;
于 2011-12-08T22:59:16.430 回答