Flex端的编写
在第一部分我们已经准备好了所有的后台代码,接着我们来进行Flex端的开发。
首先,为了代码分离的考虑,我们将后台Django服务配置的设置单独存放在services-config.xml文件里面:
[xml]
<?xml version="1.0" encoding="UTF-8"?>
<services-config>
<services>
<service id="ananasService" class="flex.messaging.services.RemotingService" messageTypes="flex.messaging.messages.RemotingMessage">
<destination id="ananasAmf">
<channels>
<channel ref="ananasChannel"/>
</channels>
<properties>
<source>*</source>
</properties>
</destination>
</service>
</services>
<channels>
<channel-definition id="ananasChannel" class="mx.messaging.channels.AMFChannel">
<endpoint uri="http://127.0.0.1/ananas/gateway/" class="flex.messaging.endpoints.AMFEndpoint"/>
</channel-definition>
</channels>
</services-config>
注意,其中<endpoint />里面的uri地址就是我们前面在Django的urls.py中定义的PyAMF网关访问URL地址一致。
下面是一个简单的Flex的测试代码:
[xml]
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" creationComplete="getAllDepartment()">
<mx:Script>
<![CDATA[
import mx.rpc.AsyncToken;
import mx.rpc.AsyncResponder;
import mx.rpc.events.FaultEvent;
import mx.rpc.events.ResultEvent;
import mx.controls.Alert;
private function getAllDepartment():void{
var token:AsyncToken=djangoService.getAllDepartments();
token.addResponder(new AsyncResponder(AfterGetDeps,falutHandler));
}
[Bindable]
private var depAC:Array;
private function AfterGetDeps(result:Object, token:Object=null):void{
var evt:ResultEvent=result as ResultEvent;
depAC=evt.result as Array;
}
private function falutHandler(error:Object, token:Object=null):void{
var evt:FaultEvent=error as FaultEvent;
Alert.show(evt.message.toString());
}
[Bindable]
private var userAC:Array;
private function doQueryUser():void{
var token:AsyncToken=djangoService.getDepAllUsers(dep_cb.selectedItem.id);
token.addResponder(new AsyncResponder(AfterGetUsers,falutHandler));
}
private function AfterGetUsers(result:Object, token:Object=null):void{
var evt:ResultEvent=result as ResultEvent;
userAC=evt.result as Array;
}
]]>
</mx:Script>
<mx:RemoteObject
id="djangoService"
destination="ananasAmf"
showBusyCursor="true"/>
<mx:Panel title="用户管理">
<mx:DataGrid dataProvider="{userAC}">
<mx:columns>
<mx:DataGridColumn dataField="id" headerText="员工号" width="100"/>
<mx:DataGridColumn dataField="name" headerText="姓名" width="200"/>
</mx:columns>
</mx:DataGrid>
<mx:ControlBar>
<mx:ComboBox id="dep_cb" dataProvider="{depAC}" labelField="name"/>
<mx:Button label="查询" click="doQueryUser()"/>
</mx:ControlBar>
</mx:Panel>
</mx:Application>
注意其中,<RemoteObject/>的destination=”ananasAmf”与我们前面的services-config.xml中定义的<destination id=”ananasAmf”>一致。
注意编译以上程序的时候,请使用“-services services-config.xml”参数加载Service配置。
以上是我们完整的演示了Django与Flex的完整交互过程,使用的全开源的技术手段,这样的开发方案对于用户来说,不需要购买任何额外的应用服务器,部署成本是及其低廉的,是不是很有吸引力,再而,因为都是开源的实现,碰任何难点您都可以深入源码的内部去寻求解决之道,真正可以做到随需而变。
PS:基于开源自由的精神,如果您对开源产品源码做了任何的有益的修改,请及时回馈社区!
O comments at "Flex+PyAmf+Django+MySQL 第二部分"
Comment Now!