Question

J'ai un tel problème: J'ai 2 composants personnalisés, qui ont leur propre hiérarchie d'imbrication ... L'un est pour un autre récipient. Je dois « Familiarisez-les » les uns avec les autres. La façon dont je suis en train de réaliser qui utilise les événements mondiaux (un côté tire et l'autre est la capture):

Application.application.addEventListener("Hello", function (data:Event):void{
        // .. some actions
    });

//and
Application.application.dispatchEvent(new Event(Hello));

Tout est assez bon, mais il y a un truc .. quand je suis en train d'attraper l'événement, je ne peux pas accéder à la classe, qui est attrapant. Par exemple:.

  1. Conteneur déclenche l'événement.
  2. Enfant caughts il.
  3. doit être créé ensuite la connexion entre le conteneur et de l'enfant.

, la seule chose que je pouvais acheive passe une référence au conteneur dans le DynamicEvent. Est-il possible que je puisse accéder à l'enfant à la fonction gestionnaire d'événements. Ou peut-être il y a beaucoup plus élégante pour résoudre ce problème ...

Toute aide serait appréciée greately:)

Était-ce utile?

La solution

Dans la plupart des cas, soit la cible ou currentTarget vous donnera accès au composant qui tire l'événement.

http://livedocs.adobe.com/flex /3/langref/flash/events/Event.html http://livedocs.adobe.com/flex/ 3 / langref / flash / événements / Event.html # currentTarget http://livedocs.adobe.com/flex/ 3 / langref / flash / événements / Event.html # cible

Cependant, avec votre approche, vous tiriez l'événement de l'application de niveau supérieur; pas de l'un de vos composants imbriqués. Cela me semble inhabituel.

Je vous imaginer avoir une hiérarchie comme ceci:

Application

--- Conteneur1

------- Container2

Je recommande tirer l'événement de container2 et en écoutant dans container1.

Votre code d'expédition en Container2 sera quelque chose comme ceci:

this.dispatchEvent(new Event('myCustomEvent'));

Dans CONTAINER1 vous pouvez écouter quelque chose comme l'événement ceci:

container2.addEventListener('myCustomEvent', onMyCustomEvent);

Si vous avez besoin d'ajouter des données d'événements personnalisés à votre événement; vous pouvez créer vos propres données de classe d'événements personnalisés et add. Avez-vous un cas d'utilisation spécifique pour le tir des événements hors du conteneur d'application? J'aimerais entendre.

Autres conseils

Nous avons fait comme dit Flextras, créer des événements personnalisés, dans notre cas d'événements Cairngorm, et effectivement ajouté des données, une référence au conteneur que vous voulez que le répondeur de l'événement pour répondre. Je ne l'ai pas vraiment envie de le faire de cette façon si, comme de très rares occasions le récipient pourrait ne pas être dans un état où il peut interagir. Dans notre cas, nous avons beaucoup de modules chargés dynamiquement qui peuvent aller et venir et puis vlan! Tout à coup, vous obtenez le flex équivalent d'une exception de pointeur NULL. Mais c'est le prix que vous payez lorsque vous êtes très asynchrone, beaucoup de contrôle nul et exception attrapant.

Le type de gestion des événements que vous cherchez est bien résolu avec un cadre d'injection de dépendance comme Maté ou Swiz . En gros, vous besoin d'événements de capture au niveau mondial, puis exécuter diverses actions tout au long de votre application dans divers composants sur ces événements.

a Maté le concept d'un eventmap qui vous permet de cartographier certains événements d'interagir avec vos points de vue de diverses façons. Vous pouvez injecter des valeurs dans les propriétés d'affichage ou des méthodes d'appel dans une vue lorsque certains événements se produisent.

Si vous ne voulez pas aller avec un cadre, regardez les bulles propriété de la classe d'événements. Lorsque vous remplacez la classe de l'événement pour créer un événement personnalisé, définissez la valeur par défaut de bulles true . De cette façon, vos événements continuera à bouillonner jusqu'à l'application principale, quelle que soit la façon dont ils sont profondément imbriquées dans votre application.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top