Simple question: hows to dynamically reference a class object

Hi i  need a little help as my brain has gone dark on me :-)

i have the below object backupCartItem (simplified)

and i have a function which needs to reference different properties within the different contained objects.

public function createEndorcementItem( propertyClass:String, propertyName:String ):void
{
var val:* = backupCartItem[ propertyClass ][ propertyName ];
trace( val.toString();
}

public function doSomething():void
{
createEndorcementItem( 'sessionVO.primaryInsurie', 'AGE_NOW');
}


the above little script example should set val to being
backupCartItem.sessionVO.primaryInsurie.AGE_NOW

but it throws an error

Property sessionVO.primaryInsurie not found on com.travins.cairngorm.model.CartItemVO

how can i dynamically reference the object please






      backupCartItem      com.travins.cairngorm.model.CartItemVO (@70bd781)      
            admin_fee      0      
            id      1174 [0x496]      
            sessionVO      com.travins.cairngorm.model.CurrentSessionVO (@27a2881)      
                  ADULT_COUNT      1      
                  CHILD_COUNT      0      
                  primaryInsurie      com.travins.cairngorm.model.InsurieVO (@1fa5dc1)      
                        AGE_AT_START_TIME      40 [0x28]      
                        AGE_ERROR      ""      
                        AGE_IS_VALID      true      
                        AGE_NOW      40 [0x28]      
                        COUNTRY_ID      1      
                        DATE_OF_BIRTH      Date (@71dbcd1)      
cghrmauritiusAsked:
Who is Participating?
I wear a lot of hats...

"The solutions and answers provided on Experts Exchange have been extremely helpful to me over the last few years. I wear a lot of hats - Developer, Database Administrator, Help Desk, etc., so I know a lot of things but not a lot about one thing. Experts Exchange gives me answers from people who do know a lot about one thing, in a easy to use platform." -Todd S.

dgofmanCommented:
Hi,
You mixed in your code setter and getter that reason why you confused yourself.
Check if this what you want:

private var backupCartItem:Object;

			public function createEndorcementItem( propertyClass:String, propertyName:String, value:*):void
			{
				if(backupCartItem == null)
					backupCartItem = {};
				if(backupCartItem[propertyClass] == undefined)
					backupCartItem[propertyClass] = {};
				backupCartItem[propertyClass][propertyName] = value;
			}
			
			public function getEndorcementItem( propertyClass:String, propertyName:String ):void
			{
				var val:* = backupCartItem[propertyClass][propertyName];
				trace( val.toString());
			}
			
			public function doSomething():void
			{
				createEndorcementItem( 'sessionVO.primaryInsurie', 'AGE_NOW', 25);
				getEndorcementItem( 'sessionVO.primaryInsurie', 'AGE_NOW');
			}

Open in new window

0

Experts Exchange Solution brought to you by

Your issues matter to us.

Facing a tech roadblock? Get the help and guidance you need from experienced professionals who care. Ask your question anytime, anywhere, with no hassle.

Start your 7-day free trial
cghrmauritiusAuthor Commented:
humm no sorry i needed it the other way round im not trying to set the value im trying to get the value of

backupCartItem[ propertyClass ][ propertyName ]

i know there is a value cause if i query it manually as

backupCartItem.sessionVO.primaryInsurie.AGE_NOW  i do ge the cirrect value but i cant get it when using the square brackets

any ideas please
0
cghrmauritiusAuthor Commented:
i see yuor example does work, i must have something wrong with my backupcartItem but i dont understand why because i can get the value if done manually

thanks i will assign you the points

thanks for your time
0
Upgrade your Question Security!

Your question, your audience. Choose who sees your identity—and your question—with question security.

cghrmauritiusAuthor Commented:
Thanks
0
cghrmauritiusAuthor Commented:
Actually if checked in debuger your example isnt right im afraid

backupCartItem      Object (@8cb9421)      
      sessionVO.primaryInsurie      Object (@8cb93f9)      
            AGE_NOW      25 [0x19]      


as per my original which is what my object dump looks like

backupCartItem      com.travins.cairngorm.model.CartItemVO (@70bd781)      
             sessionVO      com.travins.cairngorm.model.CurrentSessionVO (@27a2881)      
                   primaryInsurie      com.travins.cairngorm.model.InsurieVO (@1fa5dc1)      
                        AGE_IS_VALID      true      
                        AGE_NOW      40 [0x28]      

please notice that in your example the primaryInsurie object isnt nested inside sessionVO

0
cghrmauritiusAuthor Commented:
ok i have found a solution finally your comment gave me an idea which worked so thanks for the pointers


here is my solution but im sure its a dirty method and that there must be a cleaner way!!!

public function createEndorcementItem( propertyClass:String, propertyName:String ):void
{
	var arr:Array = propertyClass.split(".");
				
	var cur:Object;
	cur = backupCartItem;
				
	for each (var a:String in arr)
	{
		cur = cur[a];
	}
	var val:* = cur[propertyName];
}

Open in new window

0
dgofmanCommented:
I am very happy to know I helped you.
Regards,
David
0
It's more than this solution.Get answers and train to solve all your tech problems - anytime, anywhere.Try it for free Edge Out The Competitionfor your dream job with proven skills and certifications.Get started today Stand Outas the employee with proven skills.Start learning today for free Move Your Career Forwardwith certification training in the latest technologies.Start your trial today
Apache Flex

From novice to tech pro — start learning today.

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.