2009-02-09 12 views
12

In einer FLEX-App versuche ich, ein benutzerdefiniertes Ereignis erneut zu versenden. I.e. component1 gibt dispatchEvnet (event) aus, component2 registriert einen Handler für das Ereignis, die einzige Funktion des Handlers ist wiederum dispatch (event). Schließlich wartet component3 auf das Ereignis, das aus component2 kommt. Was ich versuche zu tun, ist ähnlich dem Konzept von "Re-Werfen" Ausnahmen (und aus ähnlichen Gründen). Der Unterschied ist, dass das erneute Versenden in AS3 (Flash 10) nicht zu funktionieren scheint. In IE passiert nichts, und in FF3 gibt es eine Ausnahme, die besagt, dass die Typumwandlung fehlgeschlagen ist, während versucht wurde, den Event-Typ zu meinem CustomEvent zu zwingen, während der Handler in component3 aufgerufen wird. Das Verfolgen von Code im Debugger zeigt, dass zu dem Zeitpunkt, an dem component3 aufgerufen wird, das Ereignis tatsächlich ein generisches Ereignis ist und alle meine benutzerdefinierten Sachen verloren sind. Soll das der Fall sein?Ereignis erneut senden in FLEX

Antwort

19

Das Problem, das auftritt, wird dadurch verursacht, dass das Ereignis clone() in Ihrem benutzerdefinierten Ereignis nicht überschrieben wird.

Wenn Ereignisse erneut gesendet werden, werden sie geklont und geändert. Wenn Sie clone() nicht überschreiben, erhalten Sie die Basisimplementierung von clone(), die ein Event zurückgibt. Da Event nicht in den benutzerdefinierten Ereignistyp umgewandelt werden kann, wird ein Laufzeitfehler ausgelöst.

Aus der Dokumentation:

Wenn Sie Ihre eigenen benutzerdefinierten Event-Klasse erstellen, müssen Sie die geerbte Event.clone() -Methode, um außer Kraft setzen, damit sie die Eigenschaften der benutzerdefinierten Klasse zu duplizieren. Wenn Sie nicht alle Eigenschaften, die Sie in der Ereignisunterklasse hinzufügen, festlegen, weisen diese Eigenschaften nicht die richtigen Werte auf, wenn Listener das Ereignis redispatched verarbeiten.

Verwandte Themen