Что вы можете сделать, чтобы заархивировать это (одно решение, которое я использовал в плагине):
Ваш плагин имеет js файл в папке www
, который управляет Функции. В этом файле вы можете создать методы для создания прослушивателя, удаления прослушивателя, fireEvent:
exports._listener = {};
/**
* Fire event with given arguments.
*
* @param [ String ] event The event's name.
* @param [ Array<Object> ] The callback's arguments.
*
* @return [ Void ]
*/
exports.fireEvent = function (event)
{
var args = Array.apply(null, arguments).slice(1),
listener = this._listener[event];
if (!listener)
return;
for (var i = 0; i < listener.length; i++)
{
var fn = listener[i][0],
scope = listener[i][1];
fn.apply(scope, args);
}
};
/**
* Register callback for given event.
*
* @param [ String ] event The event's name.
* @param [ Function ] callback The function to be exec as callback.
* @param [ Object ] scope The callback function's scope.
*
* @return [ Void ]
*/
exports.on = function (event, callback, scope)
{
if (typeof callback !== "function")
return;
if (!this._listener[event])
{
this._listener[event] = [];
}
var item = [callback, scope || window];
this._listener[event].push(item);
};
/**
* Unregister callback for given event.
*
* @param [ String ] event The event's name.
* @param [ Function ] callback The function to be exec as callback.
*
* @return [ Void ]
*/
exports.un = function (event, callback)
{
var listener = this._listener[event];
if (!listener)
return;
for (var i = 0; i < listener.length; i++)
{
var fn = listener[i][0];
if (fn == callback)
{
listener.splice(i, 1);
break;
}
}
};
Возможно, вам придется немного их отредактировать, чтобы соответствовать тому, что вы хотите. Затем вам нужно соединение с вашим собственным кодом, это может быть заархивировано с помощью вызова метода при запуске плагина, например:
channel.onCordovaReady.subscribe(function () {
cordova.exec(function(event) {
// Callback from Native Code received. Fire to JS Listeners
this.fireEvent(event);
}, null, 'YourPluginName', 'init', []);
}
, тогда вам нужна функция (Objective- C, так как я этого не делаю Swift много) вызывается init (), который просто сохраняет CallbackId:
- (void) init:(CDVInvokedUrlCommand *)command
{
self.eventCallbackId = command.callbackId;
return;
}
Затем вы можете отправить что-то в CallbackId через:
CDVPluginResult* result = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsString:@"event"];
[self.commandDelegate sendPluginResult:result callbackId:self.eventCallbackId];