当代码内嵌在flex中的mxml标记中时,如何使用event参数

时间:2011-06-02 07:40:15

标签: flex mxml

有什么区别:

在HTTPService类的result属性中给出一个函数引用,如下所示:

protected function httpserviceCheckUpdate_resultHandler(event:ResultEvent):void
{
     var version:Number = event.result.text.version as Number;
     var xmldata:XML = XML(event.result);
     // and all the processing you want to do
}
<mx:HTTPService id="httpserviceCheckUpdate"
                    method="POST"
                    url="http://abc.com/actions.php"
                    resultFormat="text"
                    fault="httpservicexml_faultHandler(event)"
                    result="httpserviceCheckUpdate_resultHandler(event)">
        <mx:request xmlns="">
            <action>versionCheck</action>
        </mx:request>
    </mx:HTTPService>

在同一HTTPService类的<mx:result></mx:result>中编写完整函数。

<mx:HTTPService id="httpserviceCheckUpdate"
                method="POST"
                url="http://abc.com/actions.php"
                resultFormat="text"
                fault="httpservicexml_faultHandler(event)"
                result="httpserviceCheckUpdate_resultHandler(event)">
    <mx:request xmlns="">
        <action>versionCheck</action>
    </mx:request>
    <mx:result>
        <![CDATA[
        var version:Number = event.result.text.version as Number;
        var xmldata:XML = XML(event.result);
        // and all the processing you want to do
        ]]>
    </mx:result>
</mx:HTTPService>

如果两者都相同,那么如何使用第二种方法提供事件参数(如httpservice类的result属性中所写)?

其中哪一个是在FLEX中做事的更好方法

由于

2 个答案:

答案 0 :(得分:1)

实际上我主要在代码中设置事件,所以甚至不像你的第一个例子,但是,比如说,在一个完整的事件调用中:

component.addEventListener(<event>, <handler>, <usecapture>, <priority>, <weakreference>)

始终使用全部5个参数。我在代码中执行它,因为我倾向于在不需要时删除侦听器,但在需要时再次添加它们:这只能在代码中完成。

我总是使用所有5个参数,因为它允许精确控制优先级(谁先获取事件),第二个是因为内存管理:如果我有机会忘记删除一个监听器而且eventdispatcher是唯一的强引用对于事件处理程序,垃圾收集器仍然可以删除处理程序所属的对象。我认为仅这一点值得在代码中定义事件处理程序。

回到你的问题:我从来没有找到像你这样的例子,我发现的是这样的:

<mx:HTTPService id="httpserviceCheckUpdate"
                method="POST"
                url="http://abc.com/actions.php"
                resultFormat="text"
                fault="httpservicexml_faultHandler(event)"
                result="httpserviceCheckUpdate_resultHandler(event)">
    <mx:request xmlns="">
        <action>versionCheck</action>
    </mx:request>
    <mx:result>
        <![CDATA[
        import ....ResultEvent;
        protected function httpserviceCheckUpdate_resultHandler(event:ResultEvent):void 
        {
            var version:Number = event.result.text.version as Number;
            var xmldata:XML = XML(event.result);
            // and all the processing you want to do
        }
        ]]>
    </mx:result>
</mx:HTTPService>

如您所见,您在此处拥有包含Event的完整功能签名。唯一的区别是组件中定义的处理程序将在容器中定义的处理程序之前调用,除此之外我认为它们同样好,并且比在代码中设置处理程序更糟糕。

答案 1 :(得分:1)

使用<mx:result>标记不是标准的处理方式。您可以使用MXML为任何事件使用标记。它用于快速原型设计,但不是代码清洁度。它们不完全相同,因为后者是一个没有参数的匿名函数,但您可以使用httpserviceCheckUpdate.lastResult属性访问结果。

你的第一种方法是更好的方法,因为它是标准的,更清洁,可恢复,你可以设置参数。