GWT JsInterop:JsType属性,带有-&引用;名义上
我想包装Javascript对象GWT JsInterop:JsType属性,带有-&引用;名义上,gwt,Gwt,我想包装Javascript对象 {"Ctrl-Space": "autocomplete"} 到GWT。 当我尝试时: @JsType public class ExtraKeyType { @JsProperty(name = "Ctrl-Space") public String ctrlSpace = "autocomplete"; } 我得到了错误 字符串ExtraKeyType.ctrlSpace“”具有无效的名称“Ctrl空格” 可以用JsInterop来包装它
{"Ctrl-Space": "autocomplete"}
到GWT。
当我尝试时:
@JsType
public class ExtraKeyType {
@JsProperty(name = "Ctrl-Space")
public String ctrlSpace = "autocomplete";
}
我得到了错误
字符串ExtraKeyType.ctrlSpace“”具有无效的名称“Ctrl空格”
可以用JsInterop来包装它吗?这是不可能的,但这是故意的。它受到这个强制使用有效JS标识符的正则表达式的限制 您应该注意,这是非法的{带破折号:“坏”},因为破折号对于标识符无效。但这是合法的{带下划线:“right”},它在JsInterop中正常工作。但是,JS很棘手,它实际上支持无效的标识符,只需要被引用,这样您就可以编写{“with dash”:“right too”} 所以,看起来您要求的是改进JsInterop,以支持本机类型属性中的无效标识符。我认为这还不受支持,因为例如,无效标识符不能与点表示法一起使用,因此生成的JS代码将与无效标识符不同。但是,如果您想将JSON映射到Java类型,这看起来是一个有趣的(几乎是必需的)特性
这是您的下一步:您不能使用简单的
@JsProperty
注释来执行此操作
解决方法是使用jsinterop base
库、classJs
和JsPropertyMap
,如下所示:
import jsinterop.annotations.JsOverlay;
import jsinterop.base.Js;
@JsType
public class ExtraKeyType {
//@JsProperty(name = "Ctrl-Space")
//public String ctrlSpace = "autocomplete";
@JsOverlay
public final void setCtrlSpace(String value) {
Js.asPropertyMap(this).set("Ctrl-Space", value);
}
@JsOverlay
public final String getCtrlSpace() {
return Js.asPropertyMap(this).getAny("Ctrl-Space").asString();
}
}
你找到解决办法了吗?我也被同样的问题困扰着……不,我没有找到解决办法,对不起。