SO dynamic access to property with custom namespace
forked from SO object living (diff: 80)
http://stackoverflow.com/questions/7211620/dynamically-access-properties-in-custom-namespaces
ActionScript3 source code
/**
* Copyright pleclech ( http://wonderfl.net/user/pleclech )
* MIT License ( http://www.opensource.org/licenses/mit-license.php )
* Downloaded from: http://wonderfl.net/c/7M9O
*/
// forked from pleclech's SO object living
package {
import flash.system.ApplicationDomain;
import flash.events.Event;
import flash.utils.setTimeout;
import com.bit101.components.TextArea
public class FlashTest extends TextArea {
public namespace foo;
foo var bar:String='baz';
public function FlashTest() {
width=400
height=400
setTimeout(doTest, 500)
}
// get a public namespace from an URI
// URI: package:namespace
// or
// URI: package.myClass/namespace
public function getNamespaceFromURI(uri:String, domain:ApplicationDomain = null):Namespace {
if(domain == null) domain = ApplicationDomain.currentDomain;
var tmp:Array = uri.split("/");
var ns:Namespace = null;
var pkg:String = tmp[0].replace(":", ".");
if(tmp.length == 1) {
// namespace declared in a file
ns = domain.getDefinition(pkg) as Namespace;
} else {
// namespace inside a class
var cls:Class = domain.getDefinition(pkg) as Class;
if(cls) {
ns = cls[tmp[1]] as Namespace;
}
}
return ns;
}
public function doTest():void {
var ns:Namespace=foo;
trace("foo::bar=>", foo::bar);
var qn:QName=new QName(ns, 'bar');
trace("this[new QName(ns, 'bar')] ==> ", this[qn]);
var dynamicNS:String='foo';
var ns2:Namespace = FlashTest[dynamicNS]
trace("ns2::['bar']=>", ns2::['bar'])
trace('getNamespaceFromURI("FlashTest/foo") ==> ', getNamespaceFromURI("FlashTest/foo"))
try{
qn=new QName(ns, 'unknown');
trace("this[new QName(ns, 'unknown')] ==> ", this[qn]);
} catch (e:*) {
trace("this[new QName(ns, 'unknown')] ==> ",e);
}
}
public function trace(...args):void {
text=text+args.join(", ")+"\n"
}
}
}
