hudeyong926 发表于 2013-1-28 09:17:07

AMFPhp与Flex3交互(二)一个带有DataGrid稍微复杂的例子

在amfphp\services ,建立一个叫做tutorials在这个目录里建立一个叫做Person.php的文档,代码如下:
<?phpclass Person {    var $firstName;    var $lastName;    var $phone;    var $email;    // explicit actionscript package    var $_explicitType = "tutorials.Person";}?>在这里面我们看到这样一个变量$_explicitType ,这位老兄是干什么的呢?他是告诉amfphp老大,这个类是与flash中的tutorials.Person(注意,这里的这个类是在flash中的,我们还没有建立,马上我们就要创建它)这个类等价的。好,既然你告诉amfphp老大有这个类了,那就要建立一个啊,要不被老大揍可不是闹着玩的。
好,上一节我们已经建立了一个工程,我们就还用那个工程吧,点击打开src文件夹,右键新建一个文件夹,起名字叫做tutorials,在这个文件夹中再建立一个Person.as文件。好,把下面的代码拷贝进去。
package tutorials{            public class Person    {      public var firstName:String;      public var lastName:String;      public var phone:String;      public var email:String;    }} 代码很简单吧,就是一个叫着Person的类,他有4个公共属性。
    回到 我们的大本营amfphp\services ,在tutorials目录中新建一个PersonService.php的文档,把下面的代码拷贝进去。
<?phprequire_once "Person.php";class PersonService {/** * Get a list of people * @returns An Array of Person */function getList() {$people = array (array ("Alessandro", "Crugnola", "+390332730999", "alessandro@sephiroth.it" ), array ("Patrick", "Mineault", "+1234567890", "patrick@5etdemi.com" ) );$p = array ();for($a = 0; $a < count ( $people ); $a ++) {$person = new Person ();$person->firstName = $people [$a] ;$person->lastName = $people [$a] ;$person->phone = $people [$a] ;$person->email = $people [$a] ;$p [] = $person;}return $p;}}?>在getList函数中,有一个保存人信息的数组people,然后我们做一个循环,把这些信息交给person(person是我们通过Person新找的一个对象)这个对象的属性中,然后我们把person对象装进p这个箱子(数组)中,然后返回p。Ok啦,代码也很好理解,对不对?
    好了,最后一步了,在工程中的src目录里,右键点击src,新建一个叫做DataGrid.mxml 的MXMLApplication的文件吧。工程如图:
http://dl.iteye.com/upload/attachment/502815/5c2d749c-d834-373a-ae32-e1ade38eac33.jpg
 调到source模式,拷贝以下代码。
<?xml version="1.0" encoding="utf-8"?><mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" backgroundColor="#FFFFFF">    <mx:RemoteObject id="myservice" source="tutorials.PersonService" destination="amfphp" fault="faultHandler(event)" showBusyCursor="true">      <mx:method name="getList" result="getListHandler(event)" fault="faultHandler(event)" />    </mx:RemoteObject>    <mx:DataGrid x="10" y="10" width="345" id="people_list" dataProvider="{dp}" change="changeHandler(event)">      <mx:columns>            <mx:DataGridColumn headerText="Last name" dataField="lastName"/>            <mx:DataGridColumn headerText="First name" dataField="firstName"/>            <mx:DataGridColumn headerText="Telephone" dataField="phone"/>            <mx:DataGridColumn headerText="Email" dataField="email"/>      </mx:columns>    </mx:DataGrid>    <mx:Script>      <!            private var dp:ArrayCollection;                        private var selectedPerson:Person;            private function faultHandler(fault:FaultEvent):void            {                Alert.show(fault.fault.faultString, fault.fault.faultCode.toString());            }            private function getListHandler(evt:ResultEvent):void            {                dp = new ArrayCollection( ArrayUtil.toArray(evt.result) );            }            private function changeHandler(event:Event):void            {                selectedPerson = Person(people_list.selectedItem);               // Alert(selectedPerson);            }      ]]>    </mx:Script>    <mx:Button x="290" y="357" label="get list" click="myservice.getOperation('getList').send();"/>    <mx:Form x="10" y="174" width="345" height="175">      <mx:FormHeading label="Selected Person" />      <mx:FormItem label="First Name">            <mx:TextInput id="person_first_name" text="{selectedPerson.firstName}" />      </mx:FormItem>      <mx:FormItem label="Last Name">            <mx:TextInput id="person_last_name" text="{selectedPerson.lastName}" />      </mx:FormItem>      <mx:FormItem label="Telephone">            <mx:TextInput id="person_phone" text="{selectedPerson.phone}" />      </mx:FormItem>      <mx:FormItem label="Email">            <mx:TextInput id="person_email" text="{selectedPerson.email}" />      </mx:FormItem>    </mx:Form></mx:Application>哈哈。运行一下,是不是这个界面。
http://dl.iteye.com/upload/attachment/502817/7d4ea51e-e169-3f4f-8e0b-859813bcd8d1.jpg
是?点击getlist按钮,看有DataGrid里有信息出现吗?有!点击DataGrid有信息的任何一行。地下的文本框有信息显示吗?
    有!你又成功了!
http://dl.iteye.com/upload/attachment/502822/a44d9d64-4aa3-3dea-8073-aae3f49a5840.jpg
页: [1]
查看完整版本: AMFPhp与Flex3交互(二)一个带有DataGrid稍微复杂的例子