I'm used to valueForKey from Apple Objective C and Java code. It's a pattern/idea originally imported from NextStep/Objective C, and put into Apple classes even in Java. something.valueForKey(key) is nothing more or less than calling something.key() (except I think it'll default to something.key for public instance variables when no method is available), but let's you do it in a way that conveniently ignores Java's form of strong typing. That is, it's not actually pure Java, but relies on some Apple classes being loaded to provide the behavior.
As far as the Java method, they are documented here:
http://developer.apple.com/mac/library/documentation/cocoa/reference/foundation/Protocols/NSKeyValueCoding_Protocol/Reference/Reference.html (ObjectiveC documentation, but you can extrapolate to Java. I know that at least at one point these methods were provided on Apple library objects in Java too, but I'm not up to date on the state of Apple OS development in Java these days).
Note if it were the Java/ObjectiveC methods we were talking about, as you can see from the documentation, you would not be able to call valueForKey("some.key.path") -- you would need to instead use valueForKeyPath() for that. And something.valueForKeyPath("some.key.path") is no more and no less than: something.some().key().path() , it's just a convenience. (in Java letting you avoid the class-casting at every step of invocation; in any language letting you easily pass around method invocation instructions as data, or store them in config files).
From: Code for Libraries [[log in to unmask]] On Behalf Of Francis Kayiwa [[log in to unmask]]
Sent: Saturday, March 27, 2010 9:33 PM
To: [log in to unmask]
On 3/27/10 6:05 PM, Eric Lease Morgan wrote:
> I have successfully defined a datasource (an XML stream). Here is an XML snippet:
> <name water_id='79'>Agean Sea at Kos, Greece</name>
> <name water_id='37''>Amazon River, Peru</name>
> <name water_id='100'>Atlantic Ocean</name>
> I am able to successfully extract the values for each water's name, like this:
> function coolHandler(event)
> var d = dashcode.getDataSource("list");
> var n = d.selection().valueForKey("name");
> alert( n );
> The result of this handler is an echoing of the value for the name element.
> Unfortunately, I want to get the value for the water_id attribute, but I can't for the life of me figure out how to access it.
you're having difficulty is because an element attribute is usually
considered a child of the element. Were I to hazard a guess, you'd need
to look at something like:
var d = dashcode.getDataSource("list");
var n = d.selection().valueForKey("name.water_id");
alert( n );
The Ranger isn't gonna like it, Yogi.