【问题标题】:Where do I put custom code in a custom component in Flash Builder?在 Flash Builder 的自定义组件中,我应该将自定义代码放在哪里?
【发布时间】:2010-12-11 21:35:28
【问题描述】:
在主文件中,我会写:
<components:mybutton id="mybutton1" rollOver="point_rollOverHandler(event)" />
但是,如果我希望组件天生具有这种行为,我应该在 mybutton mxml 文件中的何处写入以使其引用自身?
我尝试了<s:rollOver="point_rollOverHandler(event)"/>,但它抱怨元素类型必须后跟属性规范,> 或 />
【问题讨论】:
标签:
apache-flex
mxml
flash-builder
【解决方案1】:
我的猜测是您的组件基于 s:Button。只需像这样(第 5 行)在组件的主 MXML 节点中声明 rollOver 方法:
// myButton.mxml
<?xml version="1.0" encoding="utf-8"?>
<s:Button xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx"
rollOver="button1_rollOverHandler(event)"
>
<fx:Script>
<![CDATA[
protected function button1_rollOverHandler(event:MouseEvent):void
{
// TODO Auto-generated method stub
}
]]>
</fx:Script>
<fx:Declarations>
<!-- Place non-visual elements (e.g., services, value objects) here -->
</fx:Declarations>
</s:Button>
【解决方案2】:
在自定义组件的根标签中添加属性:
creationComplete="init()"
然后在自定义组件的脚本标签中创建该函数并设置鼠标事件监听器:
function init():void{
this.addEventListener(MouseEvent.MOUSE_OVER, point_rollOverHandler)
}
但这会调用自定义组件中定义的函数 point_rollOverHandler(e:MouseEvent)。如果您要调用在其父级上定义的函数,那么您所拥有的就是最好的方法。否则,您会将组件绑得太紧,这会使您的代码变得脆弱且可重用性降低。