Solved

Simple question: hows to dynamically reference a class object

Posted on 2011-03-16
7
328 Views
Last Modified: 2012-08-14
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)      
0
Comment
Question by:cghrmauritius
  • 5
  • 2
7 Comments
 
LVL 29

Accepted Solution

by:
dgofman earned 500 total points
ID: 35149658
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
 

Author Comment

by:cghrmauritius
ID: 35149839
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
 

Author Comment

by:cghrmauritius
ID: 35150016
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
Maximize Your Threat Intelligence Reporting

Reporting is one of the most important and least talked about aspects of a world-class threat intelligence program. Here’s how to do it right.

 

Author Closing Comment

by:cghrmauritius
ID: 35150021
Thanks
0
 

Author Comment

by:cghrmauritius
ID: 35150077
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
 

Author Comment

by:cghrmauritius
ID: 35150262
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
 
LVL 29

Expert Comment

by:dgofman
ID: 35150302
I am very happy to know I helped you.
Regards,
David
0

Featured Post

Find Ransomware Secrets With All-Source Analysis

Ransomware has become a major concern for organizations; its prevalence has grown due to past successes achieved by threat actors. While each ransomware variant is different, we’ve seen some common tactics and trends used among the authors of the malware.

Join & Write a Comment

Using SQL Scripts we can save all the SQL queries as files that we use very frequently on our database later point of time. This is one of the feature present under SQL Workshop in Oracle Application Express.
Why do we like using grid based layouts in website design? Let's look at the live examples of websites and compare them to grid based WordPress themes.
Viewers will get an overview of the benefits and risks of using Bitcoin to accept payments. What Bitcoin is: Legality: Risks: Benefits: Which businesses are best suited?: Other things you should know: How to get started:
The viewer will learn how to dynamically set the form action using jQuery.

706 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

20 Experts available now in Live!

Get 1:1 Help Now