<?php
require_once ('./vo/org/corlan/VOAuthor.php');
//conection info
define( "DATABASE_SERVER", "localhost");
define( "DATABASE_USERNAME", "root");
define( "DATABASE_PASSWORD", "");
define( "DATABASE_NAME", "mysite");
class MyService {
public function getData() {
//connect to the database.
$mysql = mysql_connect(DATABASE_SERVER, DATABASE_USERNAME, DATABASE_PASSWORD);
mysql_select_db(DATABASE_NAME);
mysql_query("SET NAMES UTF8");
//retrieve all rows
$query = "SELECT id_aut, fname_aut, lname_aut FROM authors_aut ORDER BY fname_aut";
$result = mysql_query($query);
$ret = array();
while ($row = mysql_fetch_object($result)) {
$tmp = new VOAuthor();
$tmp->id_aut = $row->id_aut;
$tmp->fname_aut = $row->fname_aut;
$tmp->lname_aut = $row->lname_aut;
$ret[] = $tmp;
}
mysql_free_result($result);
return $ret;
}
public function saveData($author) {
if ($author == NULL)
return NULL;
//connect to the database.
$mysql = mysql_connect(DATABASE_SERVER, DATABASE_USERNAME, DATABASE_PASSWORD);
mysql_select_db(DATABASE_NAME);
//save changes
$query = "UPDATE authors_aut SET fname_aut='".$author->fname_aut."', lname_aut='".$author->lname_aut."' WHERE id_aut=". $author->id_aut;
$result = mysql_query($query);
return NULL;
}
}
?>
------------amfphp/services/vo/org/VOAuthor.php-----------------
<?php
class VOAuthor {
public $id_aut;
public $fname_aut;
public $lname_aut;
// explicit actionscript class
var $_explicitType = "org.corlan.VOAuthor";
}
?>
--------------------------mxml文件------------------------------------
--------------------RemotingVOAuthor.mxml----------------------
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
<mx:Script>
<![CDATA[
import mx.controls.dataGridClasses.DataGridColumn;
import mx.events.DataGridEvent;
import org.corlan.VOAuthor;
import mx.controls.Alert;
import mx.rpc.events.FaultEvent;
import mx.rpc.events.ResultEvent;
import mx.collections.ArrayCollection;
/**
* This function is called when an item was edited in the data grid.
* Calls the saveData() method on the PHP server
*/
private function save(event:DataGridEvent):void {
var dataGrid:DataGrid = event.target as DataGrid;
var dsColumnIndex:Number = event.columnIndex;
var col:DataGridColumn = dataGrid.columns[dsColumnIndex];
var newValue:String = dataGrid.itemEditorInstance[col.editorDataField];
var dsFieldName:String = event.dataField;
var author:VOAuthor = event.itemRenderer.data as VOAuthor;
if (newValue == author[dsFieldName])
return;
//get the new value for the first name or last name
author[dsFieldName] = newValue;
myRemote.saveData(author);
}
]]>
</mx:Script>
<!-- this is the RemoteObject used to make the RPC calls -->
<mx:RemoteObject id="myRemote" destination="MyService" source="MyService"
endpoint="http://www.mysite.com/amfphp/gateway.php" showBusyCursor="true"/>
<mx:VBox top="30" left="100">
<mx:Button label="Get data" click="{myRemote.getData()}" />
<mx:DataGrid id="myGrid" dataProvider="{myRemote.getData.lastResult}" editable="true" itemEditEnd="save(event)">
<mx:columns>
<mx:DataGridColumn dataField="id_aut" editable="false"/>
<mx:DataGridColumn dataField="fname_aut"/>
<mx:DataGridColumn dataField="lname_aut"/>
</mx:columns>
</mx:DataGrid>
</mx:VBox>
</mx:Application>
----------------org/corlan/VOAuthor.as-----------------
package org.corlan {
[RemoteClass(alias="org.corlan.VOAuthor")]
[Bindable]
public class VOAuthor {
public var id_aut:int;
public var fname_aut:String;
public var lname_aut:String;
}
}
//----------------------------分析-------------------------------
1 面向对象的设计思路,抽象出两个模型,一个是php,一个是.as格式,互相对应,这两个类的成员变量命名是一致的。
2 注意文件的组织方式,模型文件均放在相关目录下例如:org/corlan/VOAuthor.as,类文件首字母大写
3 注意{myRemote.getData()},调用以后没有立即处理数据,而是通过"{myRemote.getData.lastResult}"的lastResult属性去读取缓存中的访问结果。
4 前端的mxml的script中:
var dataGrid:DataGrid = event.target as DataGrid; //获取当前编辑的单元格对象
var dsColumnIndex:Number = event.columnIndex; //列号
var col:DataGridColumn = dataGrid.columns[dsColumnIndex]; //?
var newValue:String = dataGrid.itemEditorInstance[col.editorDataField]; //读取新值,这里要研究下
//dataGrid各个属性的含义
var author:VOAuthor = event.itemRenderer.data as VOAuthor; //获取当前显示的单元格对象
author[dsFieldName] = newValue; //更新显示状态
5 webservice的方式直接调用php中的存储方法:
myRemote.saveData(author);
flex DataGrid 编辑后保存
最新推荐文章于 2019-09-10 09:55:56 发布