【发布时间】:2012-04-19 06:07:33
【问题描述】:
我有一个用 Java 编写的类库,想将其转换为 Javascript。所有方法都非常简单,主要与操作集合有关。我有一个类 GameControl,我可以对其进行实例化,并且我希望它的方法暴露给页面上的其他 Javascript 代码。
我想使用 GWT。我在 GWT 中有一个正在运行的项目,它可以编译,但我不知道如何公开我的 GameControl 类的实例(+功能)。
我认为使用 JSNI 公开我的对象应该可以工作,但它没有。这是它现在的样子的简短版本:
GameEntryPoint.java
import com.google.gwt.core.client.EntryPoint;
public class GameEntryPoint implements EntryPoint {
private GameControl _gameControl;
@Override
public void onModuleLoad() {
_gameControl = new GameControl();
expose();
}
public native void expose()/*-{
$wnd.game = this.@game.client.GameEntryPoint::_gameControl;
}-*/;
}
GameControl.java
package game.client;
public class GameControl {
public boolean isEmpty(int id){
// does stuff...
return true;
}
}
所以,GWT 确实编译了代码,我看到有一个GameControl_0 对象正在构建并设置到$wnd.game,但没有找到isEmpty() 方法。
我预期的最终结果是有一个window.game 作为GameControl 的一个实例,所有公共方法GameControl 都暴露了。
我该怎么做?
编辑
根据@jusio 的回复,使用JSNI 公开window 属性明确有效,但它太冗长了。我正在尝试 gwt-exporter 解决方案。现在我有
GameEntryPoint.java
package game.client;
import org.timepedia.exporter.client.ExporterUtil;
import com.google.gwt.core.client.EntryPoint;
public class GameEntryPoint implements EntryPoint {
@Override
public void onModuleLoad() {
ExporterUtil.exportAll();
}
}
RoadServer.java
package game.client;
import org.timepedia.exporter.client.Export;
import org.timepedia.exporter.client.ExportPackage;
import org.timepedia.exporter.client.Exportable;
@ExportPackage("game")
@Export("RoadServer")
public class RoadServer implements Exportable {
int _index;
int _id;
public RoadServer(int index,int id){
this._id=id;
this._index=index;
}
}
但仍然没有导出任何代码(特别是RoadServer)。
【问题讨论】:
标签: javascript gwt code-generation