GWT JSNI поддерживает обратные вызовы? - PullRequest
18 голосов
/ 29 июля 2010

Я создаю приложение GWT, которое использует локальное хранилище Web SQL (http://dev.w3.org/html5/webdatabase/).Проблема заключается в том, что API-интерфейс Web SQL использует функции обратного вызова в качестве аргументов.

Можно ли передавать обратные вызовы "Java" в JSNI?

1 Ответ

21 голосов
/ 29 июля 2010

Да, это так:

private static native void doThingWithCallback() /*-{
  var self = this;
  var callbackFn = $entry(function(val) {
    self.@com.your.package.AClass.aMethod(Ljava/lang/String;)(val);
  });
  $wnd.someApiThatTakesACallback(callbackFn);
}-*/;

Две вещи, которые нужно запомнить:

  1. $entry() напоминает GWT о необходимости отслеживания кода при использовании отладчика.
  2. var self = this сохраняет ссылку на this внутри функции - в противном случае this будет самой функцией ...
...