Volledige versie bekijken : Event dispatchen als de properties van een klasse worden aangepast
Anti
%Europe/Berlin %369 %2008, 09:51
Hoi,
Ik heb een specifieke klasse met een 10tal properties. Op dit moment dispatch ik bij elke propertie get/set een event changed dat door de main klasse wordt opgevangen en gebruikt wordt om de UI te updaten. Nu vroeg ik mij af of dit niet simpeler gaat. Maw 1 specifieke structuur die elke verandering opmerkt en als antwoord een event dispatched ipv elke propertie die apart een event dispatched wanneer ze geupdate wordt.
dank.
B-Mantis
%Europe/Berlin %534 %2008, 13:49
dan zou ik een aparte functie maken waarmee properties veranderd kunnen worden. Zoiets als:
changeProperty(prop:String, newvalue) {
if (hasOwnProperty(prop)) {
this[prop] = newvalue;
}
}
TheDutch
%Europe/Berlin %545 %2008, 14:05
Dit zit inderdaad niet standaard in ActionScript 3. Flex heeft wel de ObjectProxy (http://livedocs.adobe.com/flex/2/langref/mx/utils/ObjectProxy.html) class welke je kunt gebruiken als wrapper om een host heen om naar veranderingen van properties/variables te kunnen luisteren. Deze class is heel eenvoudige om te zetten naar een puur ActionScript 3 class. Ik zal kijken of ik dit vanavond voor je kan regelen :).
TheDutch
%Europe/Berlin %688 %2008, 17:30
Terwijl ik de ObjectProxy los aan het trekken was van de Flex SDK bedacht ik me dat je hem ook direct vanuit de Flex SDK kunt gebruiken :).
Doe het volgende:
1. Download de Flex 3 SDK.
2. Zet deze bijvoorbeeld in directory C:\libs\Flex3SDK
3. Zet deze directory nu in je classpath van je Flash CS3.
4. Zet nu deze code in je FLA
import mx.utils.ObjectProxy;
import mx.events.PropertyChangeEvent;
var anti:String = "Eén";
var op:ObjectProxy = new ObjectProxy(this);
op.addEventListener( PropertyChangeEvent.PROPERTY_CHANGE, onPropertyChange );
function onPropertyChange(event:PropertyChangeEvent):void
{
trace("Property "+event.property+" veranderd!");
trace("Property is: "+event.kind);
trace("Oude waarde: "+event.oldValue);
trace("Nieuw waarde: "+event.newValue);
}
op.anti = "Twee";
Zoals je ziet werkt het perfect. Je kunt hier verder lezen hoe je de ObjectProxy (http://livedocs.adobe.com/flex/3/langref/mx/utils/ObjectProxy.html) class kunt gebruiken :).
ps. Volgensmij kan je alle (visuele Flex component onafhankelijke) classes op deze manier gebruiken in Flash. Dus bijvoorbeeld de utility classes (mx.utils.*), formatters (mx.formatters.*), binding utility classes (mx.binding.utils.*), collections (mx.collections.*), graphics (mx.graphics.*), RPC (mx.rpc.*), validators (mx.validators), en vast nog een aantal meer.
Anti
%Europe/Berlin %878 %2008, 22:04
Edit: Ik had wat problemen met de Flex 3 SDK. Uiteindelijk heb ik het opgelost door rechtsreeks naar de directory met de mx klasse in te verwijzen:
E:\libs\Flex3SDK\frameworks\projects\framework\src
ipv enkel naar de locatie van de SDK :
E:\libs\Flex3SDK\.
Uw voorbeeld werkt natuurlijk perfect en is juist dat wat ik nodig had.
Nogmaal dank.
TheDutch
%Europe/Berlin %199 %2008, 05:46
Zo moest je het inderdaad ook doen om het werkende te krijgen. Blijkbaar vergeten bij te zetten in het stappen lijstje. Fijn dat het werkt :).
vBulletin® v3.8.1, Copyright ©2000-2012, Jelsoft Enterprises Ltd.