| | #1 (Permalink) |
| Neuer User Registriert seit: Nov 2005
Beiträge: 128
| Delegates in Objekt abspeichern?
hallo, tut mir leid wenn es schon einen beitrag zu diesem thema gibt, aber die suche nach "delegate" fördert doch ziemlich viele treffer zu tage. ich mache es bisher so, dass ich meine delegates in verbindung mit eventListenern immer in klassenvariablen abspeichere, um sie später wieder sauber entfernen zu können. also so: Code: class Test
{
var btnRollOverDelegate: Object;
public function Test ()
{
btnRollOverDelegate = Delegate.create (this, btnRollOver);
}
Code: someInstance.addEventListener ("rollOver", btnRollOverDelegate);
Code: someInstance.removeEventListener ("rollOver", btnRollOverDelegate);
|
| | |
| | #2 (Permalink) |
| mushroom powered Registriert seit: Jun 2005 Ort: Amsterdam
Beiträge: 2.647
|
Theoretisch kannst du auch: PHP-Code:
__________________ [ WHEN THE GOING GETS WEIRD THE WEIRD TURN PRO ] Download our (open-source) ANT/AS3 Project Toolkit Miroslaw Balka - How It Is - Tate Museum Of Modern Art London |
| | |
| | #3 (Permalink) |
| muh Registriert seit: Apr 2002 Ort: Freiburg / Stuttgart
Beiträge: 4.338
|
Bis auf die Typisierung (das Delegate ist ne Function) ist das gut so, wie du es machst. Ich hab mir auch schonmal Gedanken drüber gemacht, das einzige was mir einfiel war, dass sich die Delegate-Klasse selber um die von ihr erzeugten Delegates kümmern könnte, wenn du beim create noch ne ID übergibst. Dann könnte die Anwendung so aussehen: PHP-Code:
__________________ »Carpe diem«, sagte der Graf. (Terry Pratchett: Ruhig Blut!) |
| | |
| | #4 (Permalink) |
| Neuer User Registriert seit: Nov 2005
Beiträge: 128
|
danke für die antworten, das mit der typisierung ist natürlich gut zu wissen. also belasse ich die delegate-objekte so, und schiele neidisch rüber zu AS3! @janoscharlipp: hast du so eine erweiterte Delegate-klasse gerade zur hand, oder war das erstmal nur eine überlegung? |
| | |
| | #5 (Permalink) |
| muh Registriert seit: Apr 2002 Ort: Freiburg / Stuttgart
Beiträge: 4.338
|
War eigentlich mehr ne Überlegung, aber hier mal ein Ansatz, als Vorlage diente atotheks Delegate allerdings habe ich einige Änderungen vorgenommen: * keine Übergabe von Strings für die Methode * Parameter werden als Array und nicht als weitere Argumente übergeben * Reihenfolge der Parameter vom Delegate vertauscht PHP-Code: PHP-Code:
__________________ »Carpe diem«, sagte der Graf. (Terry Pratchett: Ruhig Blut!) Geändert von Janoscharlipp (18-12-2007 um 11:11 Uhr) |
| | |
| | #6 (Permalink) |
| Nagelneuer User Registriert seit: Dec 2005
Beiträge: 924
|
Man könnte es eigentlich auch so ähnlich wie AS3 machen, indem man einfach die Funktion eines Objekts durch einem Delegate ersetzt. PHP-Code: PHP-Code: hz
__________________ The fact that you've got "Replica" written on the side of your gun and the fact that I've got "Desert Eagle written on the side of mine ... :D |
| | |
| | #7 (Permalink) |
| Neuer User Registriert seit: Nov 2005
Beiträge: 128
|
@janoscharlipp: super, vielen dank! werde das gleich mal ausprobieren. @hazy: danke, guter denkanstoss. wie würde dann entfernen des events aussehen, bzw. würde das hier funktionieren? PHP-Code: |
| | |
| | #8 (Permalink) |
| Flashworker Registriert seit: Nov 2001 Ort: Nähe Mainz
Beiträge: 10.753
|
Ich speichere übrigens auch in Variablen. Das Problem ist halt, dass bei Delegate jedes Mal eine neu generierte Funktion zurückgeliefert wird und diese natürlich nicht zugeordnert werden könnne. Und das mit der ID finde ich weniger schön, deshalb bleibe ich bei meiner Variante ![]() gruß
__________________ |
| | |
| | #9 (Permalink) |
| Nagelneuer User Registriert seit: Dec 2005
Beiträge: 924
|
Die Instanz von TestDelegates musst du dann schon irgendwo speichern. Und dann einfach btn.removeListener("click", testDelegate.handleClickButton ) Man spart sich auf jeden Fall die zusätzlichen Variablen für jeden Delegate.
__________________ The fact that you've got "Replica" written on the side of your gun and the fact that I've got "Desert Eagle written on the side of mine ... :D Geändert von hazy fantazy (18-12-2007 um 12:01 Uhr) |
| | |
| | #10 (Permalink) |
| muh Registriert seit: Apr 2002 Ort: Freiburg / Stuttgart
Beiträge: 4.338
|
Ich glaube bei hazy fantazy würde das etwas anders aussehen. Eher so, dass du deine Klasse hast, welche die Event-Methoden enthält, und die diese am Anfang durch die Delegates ersetzt. Dann kannst du diese Methoden einfach ganz normal verwenden, also PHP-Code:
__________________ »Carpe diem«, sagte der Graf. (Terry Pratchett: Ruhig Blut!) |
| | |
| | #11 (Permalink) | |
| Flashworker Registriert seit: Nov 2001 Ort: Nähe Mainz
Beiträge: 10.753
| Zitat:
__________________ | |
| | |
| | #12 (Permalink) |
| Nagelneuer User Registriert seit: Dec 2005
Beiträge: 924
|
Der Unterschied ist, dass eine Funktion durch ihren Delegate ersetzt wird. PHP-Code: und die Nutzerklasse kann einfach die Eigenschaft selbst als Listener benutzen und muss nicht mehr Delegate.create benutzen.
__________________ The fact that you've got "Replica" written on the side of your gun and the fact that I've got "Desert Eagle written on the side of mine ... :D |
| | |
| | #13 (Permalink) |
| muh Registriert seit: Apr 2002 Ort: Freiburg / Stuttgart
Beiträge: 4.338
|
Nö, hier nochmal als Klasse, da wird es klarer: PHP-Code:
__________________ »Carpe diem«, sagte der Graf. (Terry Pratchett: Ruhig Blut!) Geändert von Janoscharlipp (18-12-2007 um 12:37 Uhr) |
| | |
| | #14 (Permalink) |
| Flashworker Registriert seit: Nov 2001 Ort: Nähe Mainz
Beiträge: 10.753
|
Ah stimmt, das ist echt eine gute Variante, auch wenn sie sicher nicht 100%ig sauber ist. Meint ihr man sollte immer so vorgehen? Von der Anwendung ist es am Ende ja eindeutig die schönere Variante.
__________________ |
| | |
| | #15 (Permalink) |
| Nagelneuer User Registriert seit: Dec 2005
Beiträge: 924
|
So richtige Nachteile kann ich auch nicht entdecken. Schön ist, dass sich die Klasse selbst versaut und nicht jemand anders
__________________ The fact that you've got "Replica" written on the side of your gun and the fact that I've got "Desert Eagle written on the side of mine ... :D |
| | |
![]() |
| Lesezeichen |
| Themen-Optionen | |
| Ansicht | |
| |