Отправить событие от родного до ионического - PullRequest
0 голосов
/ 07 марта 2019

Я использую плагин Ionic / Cordova для просмотра набора данных и хочу вызвать функцию в моем классе машинописи, когда нативный API вызывает событие. То, что у меня пока есть: (файл машинописи)

this.platform.ready().then(() =>{
window.plugins.plugin.startFileWatch("Path", (success) =>{console.log("Succes")}, (error) => {Console.log("ERROR"}))
}

, а затем в сценарии Java из плагина

startFileWatch: function( path, succesCB, errorCB){
  exec(succesCB, errorCB, "Class", "startFileWatch", [path]);
}

и в быстром режиме (хотя приветствуются и решения для Android):

    @objc(startFileWatch:)
    func startFileWatch(command:CDVInvokedUrlCommand){
           //bit pseudo here      
           something.addListener{
                self?.commandDelage.send(result, callbackID: command.callbackID)
}
    }

это, однако, не сработало

1 Ответ

1 голос
/ 08 марта 2019

Ваш скрипт TS и JS выглядит хорошо. И чего вам не хватает, так это того, что вы не сохраняете обратный вызов для будущих триггеров. Чтобы вызвать динамическое событие от Native до TS, вам нужно иметь прослушиватель, который фактически зарегистрирует обратный вызов на собственном уровне. Затем этот обратный вызов используется для передачи события на уровень TS.

    // Android

    protected static CallbackContext eventTriggerObj = null;
    .....
    .....

    private boolean registerForEvents ( final CallbackContext callbackContext )
    {
        eventTriggerObj = callbackContext;
        return true;
    }


  // iOS ( Obj C )

  @property ( nonatomic, retain ) NSString * eventTriggerObj ;  
  .....
  .....

  - ( void ) registerForEvents :( CDVInvokedUrlCommand * ) command
    {
        self.eventTriggerObj = command.callbackId;
        CDVPluginResult * pluginResult = [ CDVPluginResult 
             resultWithStatus:CDVCommandStatus_OK ];
         [ pluginResult setKeepCallbackAsBool:true ];
         [ self.commandDelegate sendPluginResult:pluginResult 
         callbackId:command.callbackId ];
    }

    // Swift Code (3+)
    private var eventTriggerObj : String

    void registerForEvent(command : CDVInvokedUrlCommand){
         self.eventTriggerObj = command.callbackId
         let pluginResult = CDVPluginResult(status: CDVCommandStatus_OK, messageAs: ["Message"])
         pluginResult?.keepCallback = true
         self?.commandDelegate.send(pluginResult, callbackId: self?.eventTriggerObj)
    }

Теперь используйте объект обратного вызова eventTriggerObj для отправки динамических событий на уровень TS.

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