В основном это звучит, как это было бы что-то вроде этого:
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 Overlay Type.
API выглядит странно, потому что все, по-видимому, асинхронно, но это жизнь.
Как только вы получили возможность писать привязки GWT JSNI, это довольно просто.
Если вы в конечном итоге опуститесь по этой дороге, было бы здорово, если бы вы открыли свою библиотеку оберток GWT, чтобы другие разработчики GWT могли писать приложения для iPhone/Android.
Добавлен пример метода 'play()', который является самым простым, так как он не принимает никаких параметров. –