在flex中,一般直接在设计时写remoteobject的话,这个是比较普遍了,但有的时候,需要在AS代码中动态设置
remoteobject,这个比较少见,所以小结学习之:
情景是,当页面加载时,代码新建立一个remoteobject,然后设置其方法和调用参数,最后把调用返回的结果(是JAVA中的一个LIST),绑定到
一个repeater控件中去,下面来看代码:
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" creationComplete="firstload()" width="706" height="417">
[Bindable]
private var posArray:ArrayCollection = new ArrayCollection();
private function firstload():void
{
var categoryremote:RemoteObject=new RemoteObject();
categoryremote.destination="categoryservice";
var o:AbstractOperation = categoryremote.getOperation("getCategoriesByPidflex");
o.send(144);
o.addEventListener(ResultEvent.RESULT, resultEvent);
}
//remoteobject返回的list
private function resultEvent(event:ResultEvent):void{
posArray = event.result as ArrayCollection;
r.dataProvider=posArray;
}
private function findAllFaultHandler(event:FaultEvent):void
{
Alert.show(event.fault.faultString, "Error");
}
注意用o.send中,包含了要发送的参数, o.addEventListener(ResultEvent.RESULT, resultEvent)中,处理返回的结果事件。
<mx:Repeater id="r">
<mx:Button id="repbutton" label="{Category(r.currentItem).name}" click="var btn:Button = Button(event.currentTarget);Alert.show(Category(btn.getRepeaterItem()).id); " width="555" height="83" textAlign="center" fontSize="27"/>
</mx:Repeater>
这里注意repeater R的dataprovider是动态设置的,在代码中,并且当点repeater中的每个按钮时,取得了所点选的button的id编号(注意这里因为列出的是一个个
category类,所以要先转型为Category,然后再获得其id