[英]How to define array property using jsinterop?
我正在嘗試使用JsInterop定義javascript類型,但無法弄清楚如何在類型內部定義數組屬性。
@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訪問task屬性,就像將其定義為@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;
}
};
}
}
和
@JsType
public interface ViewModel {
@JsProperty
Task[] getTasks();
@JsProperty
void setTasks(Task[] tasks);
public static ViewModel getModel() {
return new ViewModel() {
Task[] tasks;
@Override
public void setTasks(Task[] tasks) {
this.tasks = tasks;
}
@Override
public Task[] getTasks() {
return tasks;
}
};
}
}
和Javascript:
var model = ViewModel.getModel();
model.tasks = [Task.getTask('title1'), Task.getTask('title2')];
alert(model.tasks);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.