Ace-плагин - RaiseEvent из нативного кода для вызова метода в Javascript
Я использую туз-плагин http://microsoft.github.io/ace/ и хочу вызвать событие в нативном коде, чтобы вызвать метод в коде Javascript. Я уже использую плагин и не хочу использовать другой. Также я пытаюсь решить эту проблему, поэтому мне не нужно писать свой собственный плагин.
Поскольку плагин больше не поддерживается, я пытаюсь найти кого-то, кто имеет опыт использования платформы. Я использую плагин в основанном на Cordova проекте с Ionic, и я просто заинтересован в Android-части плагина. На самом деле по вопросу о плагине на github кто-то ответил на вопрос о вызове js-кода следующим образом:
На Android:
run.ace.OutgoingMessages.raiseEvent ("myevent", nativeInstance, simpleArgument);
На iOS (при импорте OutgoingMessages.h):
[OutgoingMessages liftEvent:@"myevent" instance:nativeInstance eventData:simpleArgument];
Подписка в JavaScript:
var instance = new ace.NativeObject ("ClassWithEvent"); instance.addEventListener ("myevent", function (sender, arg) {});
Однако я не могу выяснить, что подразумевается под nativeInstance. Поэтому я попытался использовать (если мой родной Java-класс с именем Example) следующее и несколько других.
run.ace.OutgoingMessages.raiseEvent("myevent", this, simpleArgument);
run.ace.OutgoingMessages.raiseEvent("myevent", new Example(), simpleArgument);
run.ace.OutgoingMessages.raiseEvent("myevent", Example.class, simpleArgument);
Но я всегда получаю нулевой объект:
Попытка вызвать виртуальный метод org.json.JSONObject.Windows.UI.Xaml.Controls.Handle.toJSONObject() для пустой ссылки на объект
По мере поиска в коде я нашел эту часть в Handle.java. Hashmaps, которые используются для отображения объектов на некоторое значение:
static java.util.HashMap<Object, Integer> _managedHandleLookup = new java.util.HashMap<Object, Integer>();
static java.util.HashMap<Object, Integer> _nativeHandleLookup = new java.util.HashMap<Object, Integer>();
public static Handle fromObject(Object obj) {
Integer value = _managedHandleLookup.get(obj);
if (value != null) {
return new Handle((int)value, false);
}
value = _nativeHandleLookup.get(obj);
if (value != null) {
return new Handle((int)value, true);
}
return null;
}
Однако я не знаю, какое значение должно быть в этих хэш-картах и почему мой объект не отображается там автоматически.
Итак, мой вопрос: есть ли у кого-то опыт в создании событий в нативном коде и в их ловушке в моем JS? Или кто-то может вообразить, в каком Integer может быть отображен мой пользовательский объект (однако я думал, что это будет сделано случайно)?
Спасибо за помощь:)