【永恒的瞬间】
☜Give me hapy ☞
找到了一个Flex RemoteObject结合CFC使用的例子.在这里我来详细讲一下.
主要三个文件.
Flex: main.mxml
AS: Test.as
CFC: test.cfc


先教大家配置一下.
main.mxml放到Flex的根目录下.
Test.as放到Flex的根目录下的cfcRemoting文件内.
test.cfc放到Coldfusion的根目录下的cfcRemoting文件内.


main.mxml文件的内容:
程序代码:
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.macromedia.com/2003/mxml" >
 <mx:Script>
 <![CDATA[
  var dependency:cfcRemoting.Test;
 ]]>
 </mx:Script>
 <mx:RemoteObject 
  endpoint="http://localhost:8300/flashservices/gateway"
  source="cfcRemoting.test"
  id="ro"
 />
 <mx:DateFormatter formatString="hh:mm:ss" id="dateFormatter" />
 <mx:Panel title="CFC Remoting" width="350">
  <mx:List id="objList" dataProvider="{ro.getObjectArray.result}" width="100%" />
  <mx:TextInput editable="false" text="{objList.selectedItem}" width="100%" />
  <mx:ControlBar>
   <mx:Label text="Number of objects:"/>
   <mx:NumericStepper id="amount" minimum="1" maximum="500" value="/5" />
   <mx:Button label="invoke" click="ro.getObjectArray(amount.value)" />
  </mx:ControlBar>
 </mx:Panel>
</mx:Application>

1.首先分析看一下他的外观是如何的.

外观用了一个Panel:用于装下面的组件.一个List:用于存放从CFC传回来的.一个TextInput:用于显示List被选的条目.一个:ControlBar:用于装Label, NumericStepper,与Button. NumericStepper用于用户所需生成的对象数,Button用于调用CFC.
程序代码:
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.macromedia.com/2003/mxml" >
 <mx:Panel title="CFC Remoting" width="350">
  <mx:List id="objList" width="100%"/>
  <mx:TextInput editable="false" width="100%" />
  <mx:ControlBar>
   <mx:Label text="Number of objects:"/>
   <mx:NumericStepper id="amount" minimum="1" maximum="500" value="5" />
   <mx:Button label="invoke" />
  </mx:ControlBar>
 </mx:Panel>
</mx:Application>
 

好了,外观出来了.
2.再看一下除外观标签外的标签.
程序代码:
<mx:Script>
 <![CDATA[
  //这里声明了一个CFC组件的一个对象.
  var dependency:cfcRemoting.Test;
 ]]>
 </mx:Script>
 <mx:RemoteObject 
  // endpoint属性指定网关,这里根大家的配置所填.我这里的是CF7.0的.如果用CFMX的端口改回8500
  endpoint=http://localhost:8300/flashservices/gateway
  // source属性指定CFC的文件
  source="cfcRemoting.test"
  //id属性指定实例名,用于在程序中的引用
  id="ro"
 />
 //formatString属性指定时间的格式
 //id属性指定实例名,用于在程序中的引用
 <mx:DateFormatter formatString="hh:mm:ss" id="dateFormatter" />
 
3.再看看外观的代码:
程序代码:
//标题设为"CFC Remoting"
//宽设为: 350
<mx:Panel title="CFC Remoting" width="350">
  // dataProvider属性等于ro. getObjectArray.result得回来的.
  <mx:List id="objList" dataProvider="{ro.getObjectArray.result}" width="100%" />
  // text属性是等于"objList"中被选择的条目
  <mx:TextInput editable="false" text="{objList.selectedItem}" width="100%" />
  <mx:ControlBar>
   <mx:Label text="Number of objects:"/>
   <mx:NumericStepper id="amount" minimum="1" maximum="500" value="/5" />
   // click事件调用ro.getObjectArray(),将NumericStepper的传到CFC里
   <mx:Button label="invoke" click="ro.getObjectArray(amount.value)" />
  </mx:ControlBar>
 </mx:Panel>

4.test.cfc的内容
程序代码:
<cfcomponent>
 <cfset this.remoteClass="cfcRemoting.Test">
 <cffunction name="getObject" access="remote" returntype="struct">
  <cfargument name="num" type="numeric" required="yes">
  <cfset var obj=StructNew()>
  <cfset obj["_remoteClass"] = this.remoteClass>
  <cfset obj["date"] = now()>  
  <cfset obj["name"] = "Object #num#">  
  <cfreturn obj>
 </cffunction>
 <cffunction name="getObjectArray" access="remote" returntype="array">
  <cfargument name="amount" type="numeric" required="no" default="1">
  <cfset arr = ArrayNew(1)>
  <cfloop from="1" to=#amount# index="j">
   <cfset arr[j]=#getObject(j)#>
  </cfloop>
  <cfreturn arr>
 </cffunction>
</cfcomponent>

这个组件有两个方法. getObject()getObjectArray().
这里的getObject()方法是由getObjectArray()方法去调用的.
getObjectArray()方法是main.mxml中的ro对象所调用的,
看一下他们做了些什么
getObjectArray()方法就根据main.mxml中的NumericStepper来动态生成数组个数.
每个数组都调用getObject() 方法来填充数据为一个结构.
getObject() 方法就将每个数组都赋上一个结构。
结构体里有:["_remoteClass"],["date"],["name"]三条。
5.Test.as的代码:
程序代码:
class cfcRemoting.Test {
 //定义一个name
 public var name:String;
 //定义一个时间
 public var date:Date;
 //构造函数
 public function Test() {
 }
 public function get label():String {
  //返回这个到main.mxml的List里
  return name + " (label test)";
 }
 
 public function toString():String {
  //返回这个到main.mxml的TextInput里
  return "Hi, this is " + name + ", created " + date.getHours() + ":" + date.getMinutes() + ":" + date.getSeconds() + ":" + date.getMilliseconds();
 }
}


好了.完成了.大家试用一下吧.
posted on 2007-03-02 14:10 ☜♥☞MengChuChen 阅读(839) 评论(0)  编辑  收藏 所属分类: flex2.0

只有注册用户登录后才能发表评论。


网站导航: