По сути это звучит так:
public final class Media extends JavaScriptObject {
protected Media() {}
public static native final Media newInstance(String src, Command command) /*-{
var callback = function() { command.execute(); };
return new Media(src, callback);
}-*/;
public native final void getCurrentPosition(AsyncCallback<String> command) /*-{
var callback = function(position) { command.onSuccess('' + position); };
this.getCurrentPosition(callback);
}-*/;
public native final void play() /*-{
this.play();
}-*/;
//... more methods here
}
Использование:
Media m = Media.newInstance("http://www.example.com/src.mp3", new Command() {
@Override
public void execute() {
// Code executed after Media is created.
}
});
m.getCurrentPosition(new AsyncCallback<String>() {
@Override
public void onSuccess(String position) {
Window.alert(position);
}
});
m.play();
Это грубый набросок, если вы знаете больше о том, какой тип передаетсяобратный вызов в том, что вы можете делать более приятные вещи, такие как int
или другой тип наложения JS.
API немного странный, потому что все выглядит асинхронно, но это жизнь.
Как только вы научитесь писать привязки GWT JSNI, это будет довольно просто.
Если вы в конечном итоге продвинетесь дальше по этому пути, было бы здорово, если бы вы открыли свою библиотеку-оболочку GWT с открытым исходным кодом, чтобы другие разработчики GWT моглинаписать несколько приложений для iPhone / Android.