前端之家收集整理的这篇文章主要介绍了
AS3的自定义元数据标记,
前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
在AS3 使用元数据标签最多的应该是swf标签了,如:
- [SWF(backgroundColor=0x000000,frameRate=24,width=1000,height=600)]
那么能不能自定义我们自己的标签,然后在运行时,获取那些含有自定义标签的类或者类成员,然后达到注入的目的呢?答案是肯定的,在robotleg等一些开源框架中也用到了注入。
要是有元数据标签需要在编译器的扩展参数中指定-keep-as3-Metadatac参数:
- -keep-as3-Metadata+=Inject,BindData
后面的Inject、BindData就是下面的例子要用的两个标签
需要注意的是这个编译参数只需要在一个运行库中指定即可,比如我们使用swc,那么编译这个swc指定了-keep-as3-Metadatac参数,那么在使用swc的库的项目是不需要再指定的。在-keep-as3-Metadatac参数使用“+=”是为了避免把别的参数定义覆盖掉。
比如Test1.as类使用元标签:
package
{
[Inject]
publicclassTest1
{
[BindData(param1="abc")]
publicvars:String='ssss';
publicfunctionTest1()
{
}
}
};
接下来我们做注入操作,在不需要直接引用s成员的情况下,根据BindDta标签,修改这个成员变量的值:
package
{
importflash.display.Sprite;
importflash.events.Event;
importflash.utils.describeType;
importflash.xml.XMLNode;
classMainextendsSprite
{
publicfunctionMain():void
{
if(stage)
init();
else
addEventListener(Event.ADDED_TO_STAGE,init);
}
privatefunctioninit(e:Event=null):void
{
removeEventListener(Event.ADDED_TO_STAGE,init);
vart:Test1=newTest1();
initMeta(t);
trace(t.s);
}
functioninitMeta(obj:*):void
{
varxml:XML=describeType(obj);
vartypeName:String=xml.@name;
initClassMeta(obj,typeName,xml);
for(vari:int=0,len:int=xml.variable.length();i<len;i++)
{
varvariables:XML=xml.variable[i];
initVariableMeta(obj,variables);
}
}
functioninitClassMeta(obj:*,typeName:String,xml:XML):void
{
int=xml.Metadata.length();i<len;i++)
{
varmata:XML=xml.Metadata[i];
varMetaName:String=mata.@name;
switch(MetaName)
{
case'Inject':
trace(typeName+',Inject:'+MetaName);
break;
}
}
}
privatefunctioninitVariableMeta(obj:*,153); background-color:inherit; font-weight:bold">void
{
varname:String=xml.@name;
vartype:String=xml.@type;
int=xml.Metadata.length();i<len;i++)
{
varmata:XML=xml.Metadata[i];
varMetaName:String=mata.@name;
switch(MetaName)
{
case'BindData':
trace(typeName+',BindData:'+MetaName+'('+mata.arg[0].@value+')');
obj[name]='inject';
break;
}
}
}
}
}
输出如下:
完整代码下载:metaDataTest.zip
作者:YoYo,原文地址:http://yoyo.play175.com/p/186.html
原文链接:https://www.f2er.com/javaschema/286342.html