是否有可能通过某种元数据来强制设置对象的属性?我们有许多非可视组件,除非设置了一个或多个属性,否则根本不做任何事情,例如:
<ToolTip target="{this}">
<mx:Image source="foo.png" />
</ToolTip>
在这种情况下,target属性可以很好地标记为必需,因为从来没有设置它是没有意义的。这不是一个大问题,因为它很容易记录,但是通过让编译器告诉开发人员他的错误来消除至少一些调试往返是很好的。
我们不希望这个标签以任何方式冗余,只需将ToolTip组件设为UIComponent并使用parent属性即可解决(在本例中)。但是一方面,这会增加不必要的开销,而在其他情况下,这根本就不合适:
<Button id="btn" label="Foo" />
<ToolTip target="{btn}">
<mx:Image source="foo.png" />
</ToolTip>
那么,强制mxml属性是否有可能?
答案 0 :(得分:1)
有一个解决方案,但它不像使用元数据那样简单。只是让您的非可视组件实现IMXMLObject接口。界面只有一个方法,“初始化”。实现接口允许您通过MXML检查对象是否已初始化。
因此......
public function initialized(document:Object, id:String):void
{
if ( target == null ) throw new Error( "You must supply an argument to target!" );
}
进行编译时检查会很好,但这很有效。