Использовать постоянную Java в GWT Javascript Overlay Type (JSO)? - PullRequest
3 голосов
/ 09 декабря 2011

Я хотел бы определить имя свойства 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.

Но это совершенно не работает, я думаю, чтоможет быть не прав.:-) Кто-нибудь может объяснить, почему?У вас есть лучшие идеи, как этого добиться?

Спасибо!

1 Ответ

4 голосов
/ 09 декабря 2011

Правильный синтаксис для ссылки на статическую переменную:

@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;
    }
}-*/;
...