¿Qué se requiere para definir un evento personalizado para un complemento de IU en NativeScript?

Lo que estoy tratando de lograr es activar un evento foo que funciona de manera similar al evento tap en un Button y se puede conectar de la siguiente manera:

<Page xmlns="http://schemas.nativescript.org/tns.xsd"
      xmlns:fooplugin="nativescript-foo-plugin">
  <StackLayout>
    <Button text="Tap Me!" tap="{{ onTap }}" />
    <fooplugin:FooPlugin foo="{{ onFoo }}" />
  </StackLayout>
</Page>

Lo que he hecho básicamente se reduce a llamar a la función notify con el valor eventName de foo desde el código del complemento (ignorando las consideraciones de fuga de memoria):

import * as view from 'ui/core/view';

export class FooPlugin extends view.View {
  constructor() {
    super();

    setTimeout(() => {
      this.notify({
        eventName: 'foo',
        object: this,
      });

      // also tried this._emit('foo');
    }, 1000);
  }
}

¿Hay algo más que me falta y que debo hacer para que esto funcione?

4
Merott 1 sep. 2016 a las 02:54

2 respuestas

La mejor respuesta

Crea una propiedad public static fooEvent="foo" el nombre de la propiedad es importante, debería ser eventname + Event ahora debería funcionar.

8
Habib Kazemi 1 sep. 2016 a las 07:28
  1. crea una propiedad de tu evento public static fooEvent="foo". ¡El nombre es importante! Tiene que ser eventname + "Event"

  2. sobrecargue la función on en su archivo de declaración index.d.ts o FooPlugin.d.ts

    // Needed when on method is overriden. on(eventNames: string, callback: (data: EventData) => void, thisArg?: any);

0
Andrei Stein 7 dic. 2017 a las 19:20