как я могу использовать параметр события, когда код написан в строке в теге mxml в flex - PullRequest
0 голосов
/ 02 июня 2011

В чем разница между:

указанием ссылки на функцию в атрибуте result класса HTTPService следующим образом:

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>

и

, кодирующимизавершить функцию в <mx:result></mx:result> того же класса HTTPService.

<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класс)?

Какой из них является лучшим способом ведения дел в FLEX

Спасибо

Ответы [ 2 ]

1 голос
/ 02 июня 2011

Использование тега <mx:result> не является стандартным способом ведения дел. Вы можете использовать теги для любых событий, используя MXML. Это сделано для быстрого создания прототипов, но не для чистоты кода. Они не совсем одинаковые, поскольку последняя является анонимной функцией без параметров, однако вы можете получить доступ к результату, используя свойство httpserviceCheckUpdate.lastResult.

Ваш первый подход - лучший, потому что он стандартный, он чище, пригоден для повторного использования, и вы можете установить параметры.

1 голос
/ 02 июня 2011

Ну, на самом деле я в основном устанавливаю события в коде, так что даже не так, как в вашем первом примере, но, скажем, в полном вызове события:

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>

как вы видите, у вас есть полная функция подписи, включая событие здесь.Единственное отличие состоит в том, что обработчики, определенные в компоненте, будут вызываться раньше, чем те, которые определены в контейнере, за исключением того, что я считаю их одинаково хорошими и оба хуже, чем установка обработчиков в коде.

...