Ace-плагин - RaiseEvent из нативного кода для вызова метода в Javascript - PullRequest
0 голосов
/ 20 июня 2019

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...