Javascript 如何使用jsinterop定义数组属性?
我试图使用JsInterop定义javascript类型,但无法理解如何在类型内定义数组属性Javascript 如何使用jsinterop定义数组属性?,javascript,gwt,smartgwt,gwt2,gxt,Javascript,Gwt,Smartgwt,Gwt2,Gxt,我试图使用JsInterop定义javascript类型,但无法理解如何在类型内定义数组属性 @JsType public interface Task { // this works @JsProperty String getTitle(); @JsProperty void setTitle(String title); } @JsType public interface ViewModelInterface { // the following wor
@JsType
public interface Task
{
// this works
@JsProperty String getTitle();
@JsProperty void setTitle(String title);
}
@JsType
public interface ViewModelInterface
{
// the following works
@JsProperty String getValue();
@JsProperty void setValue(String val);
// this does not work
@JsProperty Task[] getTasks();
@JsProperty void setTasks(Task[] tasks);
}
我应该使用什么特殊语法
更新:
我已经想出了这个问题的临时解决办法。我尝试将JNSI与JsInterop一起使用,因为类型定义是javascript类型,所以我们可以在初始化后在该类型中添加任何属性
代码在这里
public class ViewModel implements ViewModelInterface
{
private String value;
public ViewModel()
{
value = "";
initTasksArray();
}
public String getValue() { return value; }
public void setValue(String val) { this.value = val; }
private native void initTasksArray()
/*-{
this.tasks =
[
{ title: 'Get high enough to grab the flag' },
{ title: 'Find the Princess' }
];
}*-/;
}
通过这种方式,可以从javascript访问tasks属性,就像它被定义为@JsProperty一样。这只是一个临时解决方案,我相信当JsInterop正式推出时,会有一个更合适的解决方案 它应该按照所描述的那样工作。 以下是一个例子:
@JsType
public interface Task {
@JsProperty
String getTitle();
@JsProperty
void setTitle(String title);
public static Task getTask(String title) {
return new Task() {
private String title;
@Override
public String getTitle() {
return title;
}
@Override
public void setTitle(String title) {
this.title = title;
}
};
}
}
及
还有Javascript:
var model = ViewModel.getModel();
model.tasks = [Task.getTask('title1'), Task.getTask('title2')];
alert(model.tasks);
var model = ViewModel.getModel();
model.tasks = [Task.getTask('title1'), Task.getTask('title2')];
alert(model.tasks);