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

在amfphp\services ,建立一个叫做tutoria ls 在这个目录里建立一个叫做Person.php的文档,代码如下:

<?php
class 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
{
    [RemoteClass(alias="tutorials.Person")]
    [Bindable]
    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的文档,把下面的代码拷贝进去。

<?php
require_once "Person.php";

class PersonService {
	/**
	 * Get a list of people
	 * @returns An Array of Person
	 */
	function getList() {
		$people = array (array ("Alessandro", "Crugnola", "+390332730999", "[email protected]" ), array ("Patrick", "Mineault", "+1234567890", "[email protected]" ) );
		
		$p = array ();
		
		for($a = 0; $a < count ( $people ); $a ++) {
			$person = new Person ();
			$person->firstName = $people [$a] [0];
			$person->lastName = $people [$a] [1];
			$person->phone = $people [$a] [2];
			$person->email = $people [$a] [3];
			$p [] = $person;
		}
		return $p;
	}
}
?>

在getList函数中,有一个保存人信息的数组people,然后我们做一个循环,把这些信息交给person(person是我们通过Person新 找的一个对象)这个对象的属性中,然后我们把person对象装进p这个箱子(数组)中,然后返回p。Ok啦,代码也很好理解,对不对?
    好了,最后一步了,在工程中的src目录里,右键点击src,新建一个叫做DataGrid .mxml 的MXML Application的文件吧。工程如图:
AMFPhp与Flex3交互(二)一个带有DataGrid稍微复杂的例子
 调到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>
        <![CDATA[
            import mx.utils.ArrayUtil;
            import tutorials.Person;
            import mx.collections.ArrayCollection;
            import mx.rpc.events.ResultEvent;
            import mx.controls.Alert;
            import mx.rpc.events.FaultEvent;

            [Bindable]
            private var dp:ArrayCollection;

            [Bindable]
            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>

哈哈。运行一下,是不是这个界面。
AMFPhp与Flex3交互(二)一个带有DataGrid稍微复杂的例子

是?点击getlist按钮 ,看有DataGrid里有信息出现吗?有!点击DataGrid有信息的任何一行。地下的文本框有信息显示吗?
    有!你又成功了!
AMFPhp与Flex3交互(二)一个带有DataGrid稍微复杂的例子

你可能感兴趣的:(PHP,xml,Flash,Adobe,actionscript)