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 может быть отображен мой пользовательский объект (однако я думал, что это будет сделано случайно)?

Спасибо за помощь:)

0 ответов

Другие вопросы по тегам