nod::ぶろぐ:RIA::Flex/AIR/Flash

FlashやFlex,(Ajax),S2Flex2,ActionScript3,yui-frameworks,Akabanaプロジェクトなどのメモ帳

AMF0で接続時のパラメータ受け渡しができていませんでした。

こちらのエントリーに少し書きましたが、以前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

Posted by nod at 2006年02月18日 23:33 | コメント (1) | トラックバック (0) | Clip!! | Clip!! | このエントリーを含むはてなブックマーク |digg it! |del.icio.us it!

この記事に対するコメント

Hi! Nice site!

Posted by: Kathy at 2007年02月23日 00:29

コメントを投稿する




保存しますか?



この記事のトラックバックURL


この記事に対するトラックバック

この記事に対するトラックバックはまだありません。



Flex.org - The Directory for Flex Get Adobe Flash Player Made with dreamweaverMade with fireworksPowered by Movable Type 3.36Powered by Wandering Wind
Copyright : [Articles] (C) nod::ぶろぐ:RIA::Flex/AIR/Flash All Rights Reserved.
[Comments/Trackbacks] ... Authors of those have rights.