Iterating over properties of a class Actionscript

Hi I wonder if someone could help.

Still being fairly new to programming as a whole,

I have an incoming string to a function which i wish to validate against a static constant from a class.

The class is ListStyleType and it has numerous constants of the like ListStyleType.Decimal, ListStyleType.Box etc

Now I could create an array and place all the constants in that, and then loop over the values, but I dont really want to have to type out 50 odd values as the string constants already exist

Therefore I was wondering if there was any way I could loop of the properties of the class itself

ie something like

private function checkStyle(incomingString){
   for each(var property:String in ListStyleType){
       if (incomingString== property){
          etc.....
}
}
}

Thanks in advance
BloodGrinderAsked:
Who is Participating?
 
ChristoferDutzConnect With a Mentor Commented:
My solution would be a little different:

At fist create the functions that react on the constants:
function func1(obj:Object, other:Object):void {
   ... do something in here ...
}

function func2(obj:Object, other:Object):void {
   ... do something in here ...
}

function func3(obj:Object, other:Object):void {
   ... do something in here ...
}

function func4(obj:Object, other:Object):void {
   ... do something in here ...
}

Open in new window

Then initialize an Object which maps your constants to functions (Note in ActionScript functions are handled like variables):
var constMap:Object = new Object();
constMap['constant1'] = func1;
constMap['constant2'] = func2;
constMap['constant3'] = func3;
constMap['constant4'] = func4;

Open in new window

And now inside your checkStyle, simply check if there is a callback for the given input and eventually call it:
private function checkStyle(incomingString){
    if(constMap[incommingString]) {
        constMap[incommingString](incommingString, someOtherParameter);
    }
}

Open in new window

It's just an example ... but it works without loops (I hate loops ;-) ) and is pretty clean from an architectural point of view.

Hope this was what you were looking for.
0
 
ChristoferDutzCommented:
What exactly are you trying to do?

You want to create an input that takes a string and if this string matches a constant you want it to execute something (each constant different action)?
0
 
Gary BenadeConnect With a Mentor Commented:
import flash.utils.describeType;

var yourObject:YourObjectType; // the object you want to iterate

var propxml:XML = describeType(yourObject);
for each( var prop:XML in propxml..accessor)
{
      trace( prop.@name, yourObject[ prop.@name]);  // property name, value
}
0
Free Tool: IP Lookup

Get more info about an IP address or domain name, such as organization, abuse contacts and geolocation.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

 
petiexConnect With a Mentor Commented:
What hobbit said, except replace propxml..accessor with propxml..constant
0
 
ChristoferDutzCommented:
Perhaps a little explanation at what's actually happening now:

If you call
checkStyle("hurz")

Open in new window

the lookup in line 2 of checkStyle will return null and nothing will happen.
If you however call
checkStyle("constant3")

Open in new window

Then the lookup will return a reference to the func3 function.
Now the function is incoked and the string itself and any other parameter is passed and the function is executed. You could also return a value if you needed to. I just did a void function, but any other type of function would work.
0
 
BloodGrinderAuthor Commented:
Both Solution worked
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.