こちらのエントリーに少し書きましたが、以前SVNにコミットしたmxmlタグ(s2flex2-swc)は
パラメータの受け渡しがうまくできていませんでした。
パラメータの数が不定だったので「...」引数で受け取っていたのですが、その受け取ったったパラメータは配列になっていることを忘れてをそのままNetConnectionに渡していました。(-_-;)
サーバ側ロジックを呼び出す際に、パラメータを複数渡していたつもりが、配列ひとつを渡してしまっていたのです。
そのため、引数なしのメソッドは呼び出せるのですが、引数ありの場合パラメータがうまくサーバ側に引き渡されません。
NetConnection経由でメソッドを呼び出す際にパラメータの数がわからないので
「...」 引数をつかって受け取っていました。
public function remoteCall(methodName:Object, ...args):void {
if(_con==null){
initConnection();
}
:
argsで受け取ったのは配列になります。
NetConnection経由でサーバ側ロジックを呼び出す際は、argsのサイズをみて呼び出し方を変えていました。
(間違っているコード)
if(args.length>0){
_con.call(callMethod,responder,args);
}else{
_con.call(callMethod,responder);
}
この方法だとパラメータがあるときには、必ず配列ひとつを渡すことになります。
remoteCall(&qout;calculate&qout;,arg1_txt.text,arg2_txt.text);
上記のように呼び出すと実際は、引数2つの「calculate」というロジックを呼び出したいはずなのに、引数が配列1つの「calculate」を呼び出してしまいます。
配列で受け取ったものを展開して渡すように「apply」を使うように変更したところ、うまくサーバロジックを呼び出せるようになりました。
if(args.length>0){ args.unshift(callMethod,responder); _con.call.apply(_con,rest); }else{ _con.call(callMethod,responder); }
これでS2Flex2 Beta1のサンプルである、足し算を呼び出せるようになりました。
間違いの発端。m(__)m
S2Flex2開発記(5) AMF0で接続するタグ(第一弾)
http://www.noridon.net/weblogs/archives/2006/02/s2flex25_amf0.html
関数の引数
http://weblogs.macromedia.com/akamijo/archives/2005/12/post_8.cfm
[S2Flex2]足し算成功(ひがさん)
http://d.hatena.ne.jp/higayasuo/20060216#1140091481
この記事に対するコメント