Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Как передать в метод неопределённое количество параметров? (http://www.flasher.ru/forum/showthread.php?t=127524)

Dos87 15.07.2009 22:09

Как передать в метод неопределённое количество параметров?
 
Всем привет. Столкнулся с проблемой, не могу решить.
Сначала приведу код. У меня есть 2 класса:

QueryAMF
Код AS3:

package main{
        import flash.net.NetConnection;
        import flash.net.Responder;
        import flash.events.NetStatusEvent;
        import flash.events.IOErrorEvent;
        import flash.events.SecurityErrorEvent;
        import flash.events.AsyncErrorEvent;
 
        public class QueryAMF {
                private var netConnection:NetConnection = new NetConnection;
 
                public function QueryAMF() {
                        netConnection.addEventListener(NetStatusEvent.NET_STATUS, netStatusHandler);
                        netConnection.addEventListener(IOErrorEvent.IO_ERROR, ioErrorEventHandler);
                        netConnection.addEventListener(SecurityErrorEvent.SECURITY_ERROR, securityErrorHandler);
                        netConnection.addEventListener(AsyncErrorEvent.ASYNC_ERROR, asyncErrorHandler);
                        if (!netConnection.connected) {
                                netConnection.connect(Main.gateway);
                        }
                }
                public function request(requestObj:Object):void {
                        netConnection.call(requestObj.target,requestObj.responder,Main.viewerID,getHash(requestObj.params),requestObj.params);
                }
                private function getHash(params:String):String {
                        return MD5.encrypt(Main.authKey + params);
                }
                private function netStatusHandler(e:NetStatusEvent):void {
                        trace("Ошибка: " + e.info.code + " Пояснение: " + e.info.description);
                }
                private function ioErrorEventHandler(e:IOErrorEvent):void {
                        trace(e);
                }
                private function securityErrorHandler(e:SecurityErrorEvent):void {
                        trace(e);
                }
                private function asyncErrorHandler(e:AsyncErrorEvent):void {
                        trace(e);
                }
        }
}

Main
Код AS3:

package main{
        import flash.display.MovieClip;
        import flash.net.Responder;
 
        public class Main extends MovieClip {
                public static  const gateway:String = "http://localhost/gateway.php";
                public static  var viewerID:String = "99999";
                public static  const apiID:String = "33333333";
                public static  var authKey:String;
 
                public function Main() {
                        var apiSecret:String = "XXXXXXXXXXXXXXX";
                        authKey = MD5.encrypt(apiID + '_' + viewerID + '_' + apiSecret);
                        var responder:Responder = new Responder(onResult,onFault);
                        var requestObj:Object = new Object;
                        requestObj.target = "Autorize.read";
                        requestObj.responder = responder;
                        requestObj.params = "11111";
                        var queryAMF:QueryAMF = new QueryAMF;
                        queryAMF.request(requestObj);
                }
                private function onResult(e:Object):void {
                        trace(e);
                }
                private function onFault(e:Object):void {
                        if (e.code != undefined) {
                                trace("Ошибка: " + e.code + " Пояснение: " + e.description + " Файл: " + e.details);
                        } else {
                                trace("Ошибка: " + e.faultCode + " Пояснение: " + e.faultString + " Файл: " + e.faultDetail);
                        }
                }
        }
}

В классе Main я вызываю метод request класса QueryAMF и передаю в него объект requestObj. В методе request в netConnection.call() передаются постоянные параметры: target, responder, viewerID, hash и переменные(все остальные). Проблема в том, что переменных параметров может быть от 1 и больше. Как мне передать в объекте неопределённое количество параметров в netConnection.call().
Нашел в справке function apply(), но не понял куда её воткнуть.

silin 15.07.2009 23:53

непонятно в чем проблема передать в объекте неопределённое количество параметров..

если объект не подходит почему-то, то можно и через apply передать их как массив
Код AS3:

var argArr:Array = [requestObj.target,requestObj.responder,..]//
netConnection.call.apply(netConnection, argArr);

т.е. или сразу передавать в request массив, а не объект или на месте соорудить этот массив из переданного объекта

Dos87 16.07.2009 03:20

Спс. Всё заработало. На самом деле всё очень просто)

marat_sa 16.07.2009 09:10

О, для контакта приложуха))


Часовой пояс GMT +4, время: 11:54.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.