Я использую W3C Geolocation API для получения информации о местоположении в веб-приложении GWT. API геолокации построен таким образом, что функция обратного вызова вызывается сразу после получения местоположения.
Мой текущий тестовый код выглядит следующим образом:
public native void getCoordinates() /*-{
function onPositionUpdate(position) {
var lat = position.coords.latitude;
var lng = position.coords.longitude;
var alt = position.coords.altitude;
// not OK,- doesn't get invoked, and function execution stops at this point
[email protected]::testMethod()();
alert("Coordinates retrieved: " + lat + ";" + lng + ";" + alt);
}
function onPositionUpdateFailed(error) {
alert("Some error");
}
if(navigator.geolocation) {
// OK when invoked somewhere here
[email protected]::testMethod()();
navigator.geolocation.getCurrentPosition(onPositionUpdate, onPositionUpdateFailed);
} else {
alert("Geolocation is not available");
}
}-*/;
Я пытаюсь продемонстрировать, что метод testMethod
не вызывается из внутреннего метода onPositionUpdate
. Более того: никаких предупреждений после этого не отображается (оно отображается, когда вызов testMethod удаляется), но в журнале не обнаруживается никаких предупреждений или ошибок.
Мой вопрос: как я могу ссылаться на этот метод из внутренней функции? У меня такое ощущение, что this.
не является правильной ссылкой из внутренних функций. Если на класс Java нельзя ссылаться правильно, то каковы возможные обходные пути? Обратите внимание, что я не могу ничего передать функции onPositionUpdate()
, так как это функция обратного вызова.