Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Modeler   Code  
»áÔ±   
 
   
 
 
     
   
 ¶©ÔÄ
  ¾èÖú
ʹÓà Flex SDK¡¢Mate ºÍ PHP
 
×÷Õß Nathan A. Good,£¬»ðÁú¹ûÈí¼þ    ·¢²¼ÓÚ 2014-07-24
  3327  次浏览      27
 

ʹÓà Eclipse PDT ´´½¨Ö§³Ö¸»Ó¦ÓóÌÐòµÄ PHP ·þÎñ

Mate ÊÇÒ»¸öÇáÁ¿¼¶µÄʼþÇý¶¯¿ò¼Ü£¬¸Ã¿ò¼ÜÖ§³ÖÒÔ Model-View-Controller (MVC) ģʽ¹¹½¨Óû§½çÃæ£¨UI£©ºÍ·þÎñ¡£±¾ÎÄѧϰÈçºÎÁªºÏʹÓà Eclipse PHP ¿ª·¢¹¤¾ß£¨PDT£©ºÍ Flex Èí¼þ¿ª·¢¹¤¾ß£¨SDK£©¹¹½¨Ê¹Óà Mate ¿ò¼ÜµÄÓ¦ÓóÌÐò¡£±¾ÎÄÏêϸ½²½âÏÖÓÐµÄ Mate Îĵµ£¬ÒòΪËü¹Ø×¢Ê¹Óà Eclipse PDT ×÷Ϊ¹¤¾ß¡£

Adobe? Flash? ÊÇÁíÒ»ÖÖ¹¹½¨¸» Internet Ó¦ÓóÌÐò£¨RIA£©µÄºÃ·½·¨¡£Ê¹Óà Eclipse ºÍ Adobe Flex SDK£¬Äú¿ÉÒÔ½«ÏîÄ¿±àÒë½ø Flash Player ÖÐÔËÐеÄÓ¦ÓóÌÐò¡£Mate ÊÇÒ»¸öÇáÁ¿¼¶µÄʼþÇý¶¯¿ò¼Ü£¬ËüÖ§³Öͨ¹ýµ÷Óú¯ÊýÇáËɵ÷ÓÃÔ¶³Ì¶ÔÏó¡£ÕâЩԶ³Ì¶ÔÏó¿ÉÄÜÊÇÓà PHP ±àдµÄ·þÎñ¡£

ÒªÔËÐб¾ÎÄÖеÄʾÀý£¬ÄúÐèÒª Eclipse PDT¡£±¾ÎÄ»¹½«½éÉÜÄúÐèÒªµÄÆäËû×é¼þ¡£

Mate ºÍ Flex SDK ¸ÅÊö

Flex SDK ÔÊÐíÄú¹¹½¨ Adobe Flex Ó¦ÓóÌÐò¡£Flex Ó¦ÓóÌÐòʹÓà XML ¸ñʽºÍ ActionScript V3.0 ÓïÑÔµÄÔ´Îļþ¡£Ê¹ÓñàÒëÆ÷£¬Äú¿ÉÒÔ½« .mxml ÎļþºÍ ActionScript Îļþ±àÒëΪ Adobe Flex Ó¦ÓóÌÐò¡£

¿ÉÒÔÏÂÔØÁ½¸ö°æ±¾µÄ Flex SDK£º

1.Adobe Free °æ°üº¬±àÒëÓ¦ÓóÌÐòµÄ Adobe ²úÆ·£¬»¹°üº¬ Adobe AIR ºÍÆäËû×é¼þ¡£Adobe Free SDK ͨ¹ý Adobe Flex SDK Ðí¿ÉÖ¤Ðí¿É£¨²Î¼û ²Î¿¼×ÊÁÏ£©¡£

2.ÁíÒ»¸ö SDK °æ±¾ÊÇ Open Source Flex SDK °æ£¬Ëü×ñÑ­ Mozilla Public License (MPL) Ðí¿É¡£Ëü°üº¬Ò»¸ö±àÒëÆ÷ºÍÔËÐб¾ÎÄÖеÄʾÀýÐèÒªµÄËùÓÐ×é¼þ¡£µ«ÊÇ£¬MPL Ðí¿É¿ÉÄÜÂú×ã²»ÁËÄúµÄÐèÒª¡£×ÉѯÄúµÄ·¨Âɲ¿ÃÅ£¬ÑéÖ¤Õâ¸öÐí¿ÉÊÇ·ñÊÊÓá£

ÁíÍ⣬Adobe Ìṩһ¸ö³ÆÎª Flex Builder µÄ²úÆ·£¬Äú¿ÉÒÔ½«Æä×÷Ϊһ¸ö Eclipse ²å¼þ»òÕß×÷Ϊһ¸öÍêÕûµÄ²úÆ·ÏÂÔØ¡£ÎªÔËÐб¾ÎÄÖеÄʾÀý£¬ÇëÏÂÔØ¿ªÔ´ Flex SDK¡£ÏÂÔØ ZIP Îļþ²¢½«Æä½âѹËõµ½Ò»¸ö¼òµ¥Ò׼ǵı¾µØÎ»Ö㬱¾ÎĽ«Õâ¸öλÖóÆÎª FLEX_HOME¡£±¾ÎĽ«ÑÝʾÈçºÎʹÓÃÕâ¸öÃâ·Ñ SDK ÉèÖà Eclipse£¬ÒÔ±ãÄú¿ÉÒÔֻʹÓà Eclipse¡¢PDT ºÍ Flex SDK ¹¹½¨ RIA¡£

Mate ÊÇÒ»¸ö°ïÖúÄú¹¹½¨×ñÑ­ MVC ģʽµÄÓ¦ÓóÌÐòµÄ¿ò¼Ü¡£Mate ÒÔʼþÇý¶¯£¬Òò´ËÄúÐèÒª´´½¨Ò»Ð© ActionScript Ààʼþ¡£È»ºó½«ÕâЩʼþÓ³Éäµ½Ô¶³Ì¶ÔÏóµ÷Óã¬ÒԱ㽫´úÂëϸ½ÚÖÃÓÚÊÓͼºÍÄ£ÐÍÖ®Íâ¡£

´´½¨ÏîÄ¿½á¹¹

ÔÚ±¾ÎÄÖУ¬Ò»¸ö¼òµ¥µÄʱ¼äÊäÈëÓ¦ÓóÌÐò ¡ª ³ÆÎª ChronoLog ¡ª ½«ÑÝʾÈçºÎʹÓà PHP ·þÎñ¹¹½¨Ò»¸ö Flex UI¡£Õâ¸öʾÀýÐèÒªÔÚÄúµÄ Eclipse ¹¤×÷¿Õ¼äÖн¨Á¢Á½¸öÏîÄ¿£ºÒ»¸öÊÇ PHP ÏîÄ¿£¬ÓÃÓÚ·þÎñ£»ÁíÒ»¸öÊÇÆÕͨÏîÄ¿£¬Ëü°üº¬Ò»¸ö×÷Ϊ Ant ¹¹½¨Æ÷½¨Á¢µÄ Ant Îļþ¡£Õâ¸ö Ant ¹¹½¨Æ÷ÓÃÓÚÖ´ÐÐ Flex ±àÒëÆ÷£¬ÒÔ±àÒëÓÃÓÚ UI µÄÏîÄ¿¡£

Òª´´½¨·þÎñ PHP ÏîÄ¿£¬´Ó Eclipse ²Ëµ¥ÖÐÑ¡Ôñ File > New > Project¡£Ñ¡Ôñ PHP Project£¬È»ºóÑ¡Ôñ Create project from existing source ²¢ÔÚÎļþ·þÎñÆ÷µÄÎĵµ¸ùĿ¼ÏÂÑ¡ÔñÒ»¸öλÖá£Õ⽫ÔÊÐíÄú¿ìËÙ²âÊÔËù´´½¨µÄ PHP ·þÎñ¡£

Òª´´½¨ UI ÏîÄ¿£¬Ê¹Óà File > New > Project ²¢Ñ¡Ôñ Project ´´½¨Ò»¸ö¿ÕÏîÄ¿¡£

´´½¨Õâ¸ö UI ÏîÄ¿ºó£¬´´½¨Ò»¸öÃûΪ src µÄÎļþ¼Ð£¬²¢ÔÚ¸ÃÎļþ¼ÐÖд´½¨Ò»¸öÎļþ¼Ð chronolog¡£ÔÚ chronolog Îļþ¼ÐÏ£¬·Ö±ð´´½¨ events¡¢model¡¢views ºÍ maps Îļþ¼Ð¡£Õâ¸öÏîÄ¿µÄ½á¹¹ÈçÏÂͼËùʾ¡£

ͼ 1. UI ÏîÄ¿½á¹¹

ÏÂÔØ²¢°²×° Mate

Mate ÏÂÔØÎļþÊÇÒ»¸öÒѱàÒëÎļþ£¬À©Õ¹ÃûΪ .swc¡£´ÓÏà¹ØÕ¾µãÏÂÔØÕâ¸öÎļþ£¬°²×°·½·¨Êǽ«Æäµ¼ÈëÕâ¸ö UI ÏîÄ¿ÖÐµÄ libs Îļþ¼Ð¡£½á¹ûÈçͼ 2 Ëùʾ¡£

ͼ 2. libs Îļþ¼ÐÖÐµÄ Mate .swc Îļþ

¹¹½¨Ò»¸ö¼òµ¥µÄ·þÎñ

Õâ¸ö·þÎñÓà PHP ±àд£¬Ö»ÓµÓÐÁ½¸öÀࣺһ¸öÊÇÖ´Ðк¯ÊýµÄ·þÎñÀ࣬һ¸öÊÇ TimeEntry UI ÀàÓ³Éäµ½µÄ PHP Àà¡£
±àдÕâЩ·þÎñÀà֮ǰ£¬ÏÂÔØ²¢°²×°ÐèÒªµÄ AMFPHP Îļþ¡£ÒªÔËÐÐÕâ¸öʾÀý£¬Ö»Ð轫 amfphp Îļþ¼Ð°²×°µ½ÄúµÄ PHP ÏîÄ¿ÖУ¨ÈçÏÂËùʾ£©¡£

ͼ 3. amfphp Îļþ¼Ð

Õâ¸ö·þÎñÀàÏÔʾÔÚ Çåµ¥ 1 ÖС£Õâ¸ö·þÎñÀàÖ»ÊÇÔÚÒ»¸öÁÙʱλÖÃÖÐÒÔÒ»¸ö XML СÎļþµÄÐÎʽд³öһЩֵ¡£ÔÚÄúµÄ¼ÆËã»úÉÏ£¬ÄúÒ²ÐíÐèÒªÐÞ¸ÄÕâ¸öλÖ㨴ÖÌ壩£¬ÒÔ±ãËüÄܹ»±»³É¹¦Ð´³ö¡£ÄúÐèÒª½«Ëü¸ü¸ÄΪһ¸öÄܹ»±»ÄúµÄ Web ·þÎñÆ÷¶ÁдµÄÎļþµÄÃû³Æ¡£

Çåµ¥ 1. amfphp/services/ChronoLogManager.php Îļþ

<?php
require_once('./vo/TimeEntry.php');
/*
* A service for managing time entries.
*/
class ChronoLogManager
{

public function saveTimeEntry($entry)
{

$myFile = "/tmp/time.xml";
$fh = fopen($myFile, 'w') or die("can't open file");

$stringData = "<projects>";
$stringData .= "<entry project=\"$entry->project\" " .
"time=\"$entry->time\" user=\"$entry->username\" />";
$stringData .= "</projects>";

fwrite($fh, $stringData);
fclose($fh);

}

}

?>

·þÎñ·½Ä£ÐͶÔÏó TimeEntry.php ÏÔʾÔÚ Çåµ¥ 2 ÖС£AMFPHP ÒªÇóÖµ¶ÔÏó´æ´¢ÔÚ services/vo Îļþ¼ÐÖУ¬Òò´Ë£¬Õâ¸ö PHP ÎļþÏà¶ÔÓÚ PHP ÏîÄ¿µÄ¸ùĿ¼µÄÏà¶Ô·¾¶Ãû³ÆÊÇ amfphp/service/vo/TimeEntry.php¡£AMFPHP ÒªÇóÀàÃûºÍÎļþÃû£¨²»°üº¬À©Õ¹Ãû£©Ò»Ö¡£

Çåµ¥ 2. amfphp/services/vo/TimeEntry.php Îļþ

<?php
class TimeEntry
{
var $_explicitType = 'model.TimeEntry';

public $username;
public $project;
public $time;
}
?>

ʹÓÃÀà×÷Ϊ²ÎÊý¶ÔÏóÒÔ´úÌæ¶à¸ö²ÎÊýµÄºÃ´¦ÊÇ£¬Èç¹ûÕâ¸öʱ¼äÊäÈë×Ö¶ÎÒªÌí¼Ó¸ü¶à×ֶΣ¬Ö»ÐèÏòÕâ¸ö¶ÔÏóÌí¼ÓÒ»¸öÐÂ×ֶΡ£µ«Ò²ÓÐÒ»¸ö»µ´¦£¬Ê¹Óü´Ê±Í¨Ñ¶¿ò¼ÜʱÓöµ½µÄÈκÎÎÊÌâ¿ÉÄÜ»á°éËæ¸´ÔÓµÄÀàÐÍ·¢Éú¡£ÓÐʱ£¬¼òµ¥µÄÀàÐÍ£¨×Ö·û´®¡¢ÕûÊýºÍ²¼¶ûÐÍ£©¸üÈÝÒ×ʹÓã¬ÒòΪËüÃDz»ÈÝÒ׳öÎÊÌâ¡£

ʹÓÃÒ»¸öÄ£ÐͶÔÏó

Ä£ÐͶÔÏóÊÇÒ»¸ö ActionScript À࣬ËüЯ´øÓ¦ÓóÌÐòÖеÄÊý¾Ý²¢Ó³Éäµ½ PHP ·þÎñ²ãÖеÄÒ»¸öÔ¶³Ì¶ÔÏó£¨TimeEntry.php£©¡£Äú¿ÉÒÔ½«Õâ¸ö¶ÔÏó×÷Ϊһ¸ö·½·¨ ¡ª »òÒ»¸ö·½·¨µÄ½á¹û ¡ª µÄ²ÎÊý£¬¶øÎÞÐë¹¹½¨Êý×éÔÚ UI ºÍ·þÎñÖ®¼ä´«µÝÊý¾Ý¡£

ͨ³££¬ÓÃÒ»ÖÖ¼¼Êõ¹¹½¨ UI£¬ÓÃÁíÒ»ÖÖ¼¼Êõ¹¹½¨·þÎñʱ£¬Äú±ØÐè±àд»òÕÒµ½Ò»¸ö¿ò¼Ü£¬ÒÔÁ½ÖÖ¼¼Êõ¶¼Àí½âµÄijÖÖ¸ñʽÐòÁл¯ÕâЩÀà¡£¾­³£Ê¹Óà XML£¬ÒòΪͨ³£ºÜÈÝÒ×ÕÒµ½ÓÃÏÖ´ú±à³ÌÓïÑÔ±àдµÄ¡¢¶Áд XML µÄ¹¤¾ß¡£

ÔÚÕâ¸öÓ¦ÓóÌÐòÖУ¬AMFPHP ÓÃÓÚ½« Flex ¶ÔÏóÓ³Éäµ½Ô¶³Ì PHP ¶ÔÏó¡£Adobe Message Format (AMF) ÊÇ Adobe ÓÃÓÚÐòÁл¯ºÍ·´ÐòÁл¯¶ÔÏóµÄ¸ñʽ¡£Ê¹Óà AMF µÄÒ»¸öºÃ´¦ÊÇËüÔÊÐíÄúÁ¬½ÓÕâЩ¶ÔÏó£¬ÎÞÐè×Ô¼º±àдÔÚ UI ºÍ·þÎñÖ®¼äÐòÁл¯ºÍ·´ÐòÁл¯µÄ´úÂë¡£Óм¸¸ö¿ò¼ÜÓÃÓÚͨ¹ý AMF Á¬½Ó Flex ºÍ PHP£¬ÆäÖÐÒ»¸öÀ´×Ô Zend£¨¼û ²Î¿¼×ÊÁÏ£©¡£

Çåµ¥ 3 ÖÐÏÔʾÁË TimeEntry µÄÄ£ÐͶÔÏ󣨰üº¬Ã¿¸öʱ¼äÊäÈë×ֶεÄÐÅÏ¢£©¡£½«Ëü´æ´¢µ½ UI ÏîÄ¿µÄ src/chronolog/model Îļþ¼ÐÖС£

Çåµ¥ 3. src/chronolog/model/TimeEntry.as Îļþ

package model
{
[Bindable]
[RemoteClass(alias='TimeEntry')]
public class TimeEntry
{
private var _username : String;
private var _project : String;
private var _time : String;

public function TimeEntry()
{
}

public function get username() : String
{
return _username;
}

public function set username(value : String) : void
{
_username = value;
}

public function get project() : String
{
return _project;
}

public function set project(value : String) : void
{
_project = value;
}

public function get time() : String
{
return _time;
}

public function set time(value : String) : void
{
_time = value;
}

}
}

³ýÁËÔÚÕâ¸öÀàÖÐÉùÃ÷µÄ RemoteObject ÊôÐÔÍ⣬Õâ¸öÀà¾ÍÏñÄú´´½¨À´Ö§³ÖÓ¦ÓóÌÐòµÄÆäËû ActionScript ÀàÒ»Ñù¡£

¹¹½¨Ò»¸öʼþ

Mate ÊÇÒ»¸öʼþÇý¶¯µÄ¿ò¼Ü£¬Òò´ËʹÓà Mate ʱҪ´´½¨Ðí¶àʼþ¡£Ò»¸ö Mate ʼþÊÇÒ»¸ö ActionScript À࣬Ëü´Ó»ù flash.events.Event ÀàÀ©Õ¹¶øÀ´¡£Ò»¸ö×Ö·û´®³£Á¿Ê¶±ðÒ»¸öÌØ¶¨Ê¼þ£¬Ò»¸öʼþÀàÖпÉÒÔÓÐÒ»¸ö»ò¶à¸ö³£Á¿¡£ÎÒʹÓÃÕâ¸ö¹¦ÄÜÀ´¸ù¾ÝʼþÔÚÒµÎñÁìÓòÖеÄÄ¿µÄ¶Ôʼþ·Ö×é¡£ÀýÈ磬ÔÚÕâ¸ö ChronoLog ʾÀýÖÐÓÐÒ»¸ö TimeEntryEvent Àà¡£Õâ¸öÀàʹÓó£Á¿ SAVE£¬Õâ¸ö³£Á¿±íʾһ¸öʼþ½«´¥·¢Ò»¸ö´æ´¢Ê±¼äÊäÈëµÄº¯Êý¡£Ëæ×ÅÏîÄ¿·¢Õ¹£¬Õâ¸öÀàÖпÉÄܰüÀ¨¸ü¶àʼþ£¬±ÈÈç GET »ò DELETE¡£

ʹÓÃÒµÎñÊõÓïÃüÃûÄúµÄʼþ²¢½«ËüÃÇÓ³Éäµ½ÒµÎñº¯Êý¡£²»Òª´´½¨³ÆÎª ButtonEvent µÄʼþÀ࣬Ҳ²»ÒªÌí¼Ó³ÆÎª SAVE_CLICKED µÄ³£Á¿¡£·ñÔò£¬Äú½«Ê¹Óò»ºÃµÄÃüÃû·½·¨£¬´Ó¶øÏÞÖÆÁËʼþµÄÖØÓá£Èç¹ûÓû§¸Ä±äÖ÷ÒâÇÒ°´Å¥¸ÄΪһ¸öÁ´½Ó£¬ÕâÖÖÃüÃû·½·¨½«µ¼ÖÂÄÇЩ¹ýÓÚ½ôÃܵذ󶨵½ UI µÄʼþ³öÏÖÎÊÌâ¡£

Çåµ¥ 4 ÖÐÏÔʾÁË TimeEntryEvent ActionScript ÀàµÄÒ»¸öʾÀý¡£³ýÁËÌí¼Ó SAVE ³£Á¿Ö®Í⣬¹¹ÔìÆ÷ÖÐµÄ bubbles ²ÎÊýµÄĬÈÏÖµ¸ü¸ÄΪ true¡£ÎÒΪÕâ¸öʼþÌí¼ÓÁËÒ»¸öÀàÐÍΪ¹«¹²±äÁ¿µÄ²ÎÊý TimeEntry¡£

Çåµ¥ 4. src/chronolog/events/TimeEntryEvent.as Îļþ

package events
{
import flash.events.Event;

import model.TimeEntry;

public class TimeEntryEvent extends Event
{
public static const SAVE : String = 'TimeEntryEvent_SAVE';

public var entry : TimeEntry;

public function TimeEntryEvent(type:String, bubbles:Boolean=true,
cancelable:Boolean=false)
{
super(type, bubbles, cancelable);
}

}
}

¹¹½¨Ò»¸öÊÓͼ

³ýÁË ActionScript À࣬UI ÏîÄ¿ÖÐµÄÆäÓàÎļþ¶¼ÊÇ Flex ×é¼þ¡£ÕâЩ×é¼þ·ÅÖÃÔÚÀ©Õ¹ÃûΪ .mxml µÄÎļþÖС£MXML ÎļþÊǸñʽÁ¼ºÃµÄ XML Îļþ£¬ËùÒÔÎÒ½«ËüÃÇÔÚ Eclipse ÖйØÁªµ½ XML ±à¼­Æ÷£¬ÒÔÀûÓà XML ±à¼­Æ÷µÄ¹¦ÄÜ£¬±ÈÈç¸ñʽ»¯ºÍ±ê¼Ç±ÕºÏ¡£Òª´´½¨ MXML Îļþ£¬Ñ¡Ôñ File > New > File ²¢¸øÎļþÒ»¸öÊʵ±µÄÃû³Æ¡£

¶ÔÓÚ UI£¬Ö÷³ÌÐòÎļþ£¨main.mxml£©Ö»°üº¬¶ÔÖ÷ EventMap ºÍ¶ÔÊÓͼµÄÒýÓá£Õâ¸ö main.xml µÄÔ´ÔÚÇåµ¥ 5 ÖÐÏÔʾ£¬main.mxml Îļþ´æ´¢ÔÚÕâ¸ö UI ÏîÄ¿µÄ src/chronolog Îļþ¼ÐÖС£

Çåµ¥ 5. src/chronolog/main.mxml Îļþ

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute"
xmlns:maps="maps.*"
xmlns:views="views.*">
<mx:ViewStack>
<views:DetailView id="detailView" />
</mx:ViewStack>
</mx:Application>

ÊÓͼ detailView ÊÇÒ»¸ö Flex ×é¼þ£¬ËüÀ©Õ¹ Flex Panel ¶ÔÏó¡£Õâ¸öÊÓͼµÄÕû¸öÄÚÈÝÔÚÏÂÃæÏÔʾ¡£

Çåµ¥ 6. src/chronolog/views/DetailView.mxml Îļþ

<?xml version="1.0" encoding="utf-8"?>
<mx:Panel xmlns:mx="http://www.adobe.com/2006/mxml" layout="horizontal"
width="100%"
height="100%"
xmlns:mate="http://mate.asfusion.com/">
<mx:Script>
<![CDATA[
import com.asfusion.mate.events.ResponseEvent;
import mx.controls.Alert;
import model.TimeEntry;
import events.TimeEntryEvent;

[Bindable]
public var entry : TimeEntry;

private function save() : void
{
entry = new TimeEntry();
entry.username = 'jdoe';
entry.project = projectInput.text;
entry.time = timeInput.text;
}

private function handleResult(event : ResponseEvent) : void
{
Alert.show('Success!');
}

private function handleFault(event : ResponseEvent) : void
{
Alert.show(event.fault.toString());
}

]]>
</mx:Script>
<mx:HBox>
<mx:FormItem label="Project Number">
<mx:TextInput id="projectInput" />
</mx:FormItem>
<mx:FormItem label="Time">
<mx:TextInput id="timeInput" />
</mx:FormItem>
<mx:Button label="Save" click="save()" />
</mx:HBox>
</mx:Panel>

Õâ¸öÊÓͼ°üº¬Á½¸ö×ֶκÍÒ»¸ö°´Å¥¡£ÕâЩ×Ö¶ÎÊÇÏîÄ¿±àºÅºÍÒ»¸ö±íʾÒѹ¤×÷ʱ¼äµÄÖµ¡£Ò»¸öÓû§Ãû£¨ËüÒ²ÓÃÓÚÕâ¸öʱ¼äÊäÈë×ֶΣ©ÊÇÓ²±àÂëµÄ¡£Ëæ×ÅÓ¦ÓóÌÐòÔËÐУ¬Óû§ÃûÀ´×ÔÓû§µÇ¼¸Ã³ÌÐòʱ»ñÈ¡µÄÊý¾Ý¡£½«Õâ¸öÊÓͼ×÷Ϊһ¸ö MXML Îļþ±£´æÔÚ views Îļþ¼ÐÖУ¬ÃûΪ DetailView.mxml¡£

¹¹½¨ EventMap

Ò»¸öÀ©Õ¹ Mate µÄ EventMap µÄ×é¼þÓÃÓÚ½«Ê¼þÓ³Éäµ½¶¯×÷£¬ÕâÊǽ«Ê¼þÁ´½Óµ½Ô¶³Ì¶ÔÏó¡£ÁíÍ⣬EventMap ¿ÉÒÔÓÃÓÚʹʼþÔÚ½áÊøÊ±µ÷ÓÃÆäËûʼþ£¬ÉèÖñ¾µØ¶ÔÏóÉϵÄÖµ£¬ÒÔ¼°ÔÚ±¾µØÆô¶¯·½·¨¡£

Ó¦ÌØ±ðÖ¸³öµÄÊÇ£¬Á´½Óʼþ¹¦ÄÜÇ¿´ó¡£Í¨¹ýÁ´½Óʼþ£¬Äú¿ÉÒÔ±ÜÃâ¶ÔÐí¶à½»»¥½øÐÐÓ²±àÂ룬ʹÏîÄ¿¸üÊÊÓ¦²»¶Ï±ä»¯µÄÒµÎñÐèÇó¡£ÀýÈ磬Èç¹ûÓû§Ï£ÍûÔڳɹ¦±£´æÊý¾Ýºó½çÃæ±äΪÁíÒ»¸öÊÓͼ£¬Äú¿ÉÒÔ´´½¨Ò»¸ö NavigateEvent À´ÊµÏÖÕâÖÖ¸ü¸Ä¡£TimeEntry.SAVE ʼþÄܹ»µ÷Óà NavigateEvent¡£ÕâÑù£¬Èç¹ûÓû§ÉÔºó¸Ä±äÖ÷Ò⣬ÄúÖ»Ðè¸üРEventMap À´·´Ó³ÐµÄÐèÇó¡£

Çåµ¥ 7 ÖÐÏÔʾÁË MainEventMap µÄÒ»¸öʾÀý¡£ËüÖ»ÊÇÔÚ maps Îļþ¼ÐÖд´½¨µÄÒ»¸ö .mxml Îļþ¡£

Çåµ¥ 7. src/chronolog/maps/MainEventMap.mxml Îļþ

<?xml version="1.0" encoding="utf-8"?>
<mate:EventMap
xmlns:mate="http://mate.asfusion.com/"
xmlns:mx="http://www.adobe.com/2006/mxml">
<mx:Script>
<![CDATA[
import events.TimeEntryEvent;
]]>
</mx:Script>
<mate:EventHandlers type="{TimeEntryEvent.SAVE}">
<mate:RemoteObjectInvoker destination="amfphp"
source="ChronoLogManager"
method="saveTimeEntry"
arguments="{event.entry}">
<mate:resultHandlers>
<mate:ServiceResponseAnnouncer type="result" />
</mate:resultHandlers>
<mate:faultHandlers>
<mate:ServiceResponseAnnouncer type="fault" />
</mate:faultHandlers>
</mate:RemoteObjectInvoker>
</mate:EventHandlers>
</mate:EventMap>

ÔÚ EventMap ÖУ¬RemoteObjectInvoker °üº¬½«Ê¼þÀàÐÍ TimeEntryEvent.SAVE Ó³Éäµ½Ô¶³Ì¶ÔÏó£¨ChronoLogManger£©ÉϵÄÕýÈ··½·¨£¨saveTimeEntry£©µÄÐÅÏ¢¡£RemoteObjectInvoker ÊäÈ뻹ָ¶¨²ÎÊý ¡ª{event.entry} ¼Ç¼µÄʼþµÄÊäÈë×ֶΡ£Ä¿±ê amfphp ÊÇÔÚ services-config.xml ÎļþÖÐÖ¸¶¨µÄÄ¿±êµÄ ID¡£
´´½¨ EventMap Ö®ºó£¬½«Ëü°üº¬µ½Ö÷³ÌÐòÖУ¨ÈçÇåµ¥ 8 Ëùʾ£©¡£

Çåµ¥ 8. main.mxml ÎļþÖÐµÄ MainEventMap

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
layout="absolute"
xmlns:maps="maps.*"
xmlns:views="views.*">
<maps:MainEventMap id="eventMap" />
<mx:ViewStack>
<views:DetailView id="detailView" />
</mx:ViewStack>
</mx:Application>

·Ö·¢ÊÓͼÖеÄʼþ

ʹÓà Mate ¿ÉÒÔÒÔ¶àÖÖ·½Ê½·Ö·¢Ê¼þ¡£Äú¿ÉÒÔʹÓÃÔÚÿ¸ö×é¼þÖгöÏֵķַ¢Æ÷¡£Ò²¿ÉÒÔʹÓà Mate µÄ Dispatcher£¬Õâ¸ö ChronoLog Ó¦ÓóÌÐòʹÓõľÍÊÇ Dispatcher¡£Ê¹Óà Dispatcher µÄÒ»¸öºÃ´¦ÊÇÄú¿ÉÒÔ½«Ê¼þÉϵIJÎÊýÇáËÉÉèÖÃΪ±¾µØÖµ£¨±ÈÈçÎı¾ÊäÈ룩£¬¶øÎÞÐè±àдÈκΠActionScript ´úÂëÀ´Íê³ÉÕâ¸öÈÎÎñ¡£¶øÇÒ£¬Ê¹Óà Dispatcher ¿ÉÒÔÉèÖÃÔÚʼþ½áÊøÊ±Ö´Ðз½·¨¡£

Õâ¸ö Dispatcher ÔÚÏÂÃæµÄ´úÂëÖÐÓôÖÌåÏÔʾ¡£

Çåµ¥ 9. ÔÚ src/chronolog/views/DetailView.mxml ÎļþÖÐÏÔʾµÄ Dispatcher

<?xml version="1.0" encoding="utf-8"?>
<mx:Panel xmlns:mx="http://www.adobe.com/2006/mxml" layout="horizontal"
width="100%"
height="100%"
xmlns:mate="http://mate.asfusion.com/">
<mx:Script>
<![CDATA[
import com.asfusion.mate.events.ResponseEvent;
import mx.controls.Alert;
import model.TimeEntry;
import events.TimeEntryEvent;

[Bindable]
public var entry : TimeEntry;

private function save() : void
{
entry = new TimeEntry();
entry.username = 'jdoe';
entry.project = projectInput.text;
entry.time = timeInput.text;
saveDispatcher.generateEvent();
}

private function handleResult(event : ResponseEvent) : void
{
Alert.show('Success!');
}

private function handleFault(event : ResponseEvent) : void
{
Alert.show(event.fault.toString());
}

]]>
</mx:Script>
<mx:HBox>
<mx:FormItem label="Project Number">
<mx:TextInput id="projectInput" />
</mx:FormItem>
<mx:FormItem label="Time">
<mx:TextInput id="timeInput" />
</mx:FormItem>
<mx:Button label="Save" click="save()" />
</mx:HBox>

<mate:Dispatcher id="saveDispatcher" generator="{TimeEntryEvent}"
type="{TimeEntryEvent.SAVE}">
<mate:eventProperties>
<mate:EventProperties entry="{entry}" />
</mate:eventProperties>
<mate:ServiceResponseHandler result="handleResult(event)"
fault="handleFault(event)" />
</mate:Dispatcher>

</mx:Panel>

µ÷Ó÷þÎñ

Òªµ÷Ó÷þÎñ£¬ÄúÐèÒªÔÚ services-config.xml ÎļþÖÐµÄ AMFPHP ·þÎñÅäÖÃÎļþÖн¨Á¢ PHP Àà¡£services-config.xml Îļþ°üº¬·þÎñµÄ¶Ëµã URL£¬Õâ¸ö URL ÊÊÓÃÓÚÖ§³Ö AMF µÄ¿ò¼Ü¡£services-config.xml ÎļþµÄʾÀýÈçÏÂËùʾ¡£

Çåµ¥ 10. src/services-config.xml Îļþ

<?xml version="1.0" encoding="UTF-8"?>
<services-config>
<services>
<service id="amfphp-flashremoting-service"
class="flex.messaging.services.RemotingService"
messageTypes="flex.messaging.messages.RemotingMessage">

<destination id="amfphp">
<channels>
<channel ref="my-amfphp" />
</channels>
<properties>
<source>*</source>
</properties>
</destination>
</service>
</services>
<channels>
<channel-definition id="my-amfphp"
class="mx.messaging.channels.AMFChannel">
<endpoint uri="http://localhost/chronolog/amfphp/gateway.php"
class="flex.messaging.endpoints.AMFEndpoint" />
</channel-definition>
</channels>
</services-config>

×¢Ò⣬ÄúÐèÒª½« AMFPHP ʹÓõÄÍø¹Ø URL ¸ü¸ÄΪÄúµÄ»·¾³Ê¹ÓõÄÖµ¡£

¹¹½¨ÏîÄ¿

ËùÓÐ Flex Îļþ¾ÍÐ÷ÒÔºó£¬Ant ¹¹½¨Æ÷ʹÓà Flex SDK ×Ô´øµÄ mxml.jar Îļþ±àÒëÏîÄ¿¡£Õâ¸ö Ant ÎļþÈçÏÂËùʾ¡£

Çåµ¥ 11. build.xml Îļþ

<?xml version="1.0"?>
<project name="chronologUI" basedir="." default="build">
<property name="flex.home" value="/home/ngood/bin/flex3-sdk" />
<property name="mxmlc.jar" value="${flex.home}/lib/mxmlc.jar" />
<property name="project.home" value="${basedir}" />
<property name="project.src" value="${project.home}/src" />
<property name="build.out" value="${project.home}/bin" />
<target name="build">
<java jar="${mxmlc.jar}" fork="true" failonerror="true">
<jvmarg value="-Xms256m"/>
<jvmarg value="-Xmx256m"/>
<arg value="-compiler.source-path=${project.src}" />
<arg value="+flexlib=${flex.home}/frameworks" />
<arg value="-compiler.library-path+=${project.home}/libs/Mate_08_8_1.swc" />
<arg value="-file-specs=${project.src}/chronolog/main.mxml" />
<arg value="-locale=en_US" />
<arg value="-services=${project.src}/services-config.xml" />
<arg value="-compiler.strict=true" />
<arg value="-warnings=false" />
<arg value="-output=${build.out}/chronolog.swf" />
</java>
</target>
</project>

build.xml ÎļþÌí¼Óµ½ÏîĿ֮ºó£¬°´ÕÕÒÔϲÙ×÷·½·¨Ìí¼ÓÒ»¸ö Ant Builder£º´Ó Project Explorer Ñ¡Ôñ chronologUI ÏîÄ¿£¬È»ºóÑ¡Ôñ Project > Properties£»´Ó Properties ´°¿Úµ¥»÷ New£»´ÓÁбíÖÐÑ¡Ôñ Ant Builder£»ÔÚÏÂÒ»¸ö½çÃæÖУ¨¼û ͼ 4£©£¬µ¥»÷ Browse Workspace ÒÔ²éÕÒ²¢Ñ¡Ôñ build.xml Îļþ¡£Õâ¸ö¹¹½¨Æ÷°²×°³ÌÐò×Ô¶¯Ê¹ÓÃĬÈÏÄ¿±ê£¬Òò´ËÄú¿ÉÒÔµ¥»÷ Finish ¹Ø±Õä¯ÀÀÆ÷¡£Òª»ñÈ¡¹ØÓÚ´´½¨×Ô¼ºµÄÏîÄ¿¹¹½¨Æ÷µÄ¸üÏêϸµÄ˵Ã÷£¬Çë²Î¼û ²Î¿¼×ÊÁÏ¡£

ͼ 4. ´´½¨ Ant ¹¹½¨Æ÷

ÏÖÔÚ¹¹½¨Æ÷ÒѾ­Ìí¼Óµ½ÏîÄ¿ÖУ¬Ö»Ðè´Ó Eclipse ÖеIJ˵¥ÖÐÑ¡Ôñ Project > Build ¾Í¿ÉÒÔÔËÐÐËü¡£

ÓÉÓÚÕâ¸öʾÀýʹÓà AMFPHP£¬±ØÐëÓÐÒ»¸ö AMF Ŀ¼ÒÔÖ§³Ö AMFPHP ¿ò¼Ü¡£¹ØÓÚÈçºÎ½¨Á¢ºÍ°²×° AMFPHP µÄ¸ü¶àÐÅÏ¢Çë²Î¼û ²Î¿¼×ÊÁÏ¡£

ÔËÐÐʾÀý

¹¹½¨Õâ¸ö UI ÏîÄ¿ºó£¬½« chronolog.swf Îļþ·ÅÖõ½ÄúµÄ Web ä¯ÀÀÆ÷µÄÎĵµ¸ùĿ¼֮Ï£¬²¢ÔÚä¯ÀÀÆ÷Öе¼º½µ½¸ÃÎļþ£¨ÈçÏÂͼËùʾ£©¡£

ͼ 5. ÔËÐÐÍê³ÉºóµÄÓ¦ÓóÌÐò

µ±ÄúÊäÈëÊý¾Ý²¢µ¥»÷ Save Ö®ºó£¬·þÎñ²ã½«°ÑÊý¾Ýдµ½ÔÚ·þÎñÖÐÖ¸¶¨µÄλÖÃÖеÄÒ»¸ö XML СÎļþ¡£

½áÊøÓï

ʹÓà Flex SDK¡¢Mate ºÍ PHP ¿ÉÒÔ¹¹½¨¸» Web Ó¦ÓóÌÐò¡£Ö»Ðè¶Ô Eclipse ÏîÄ¿ÉèÖýøÐÐһЩ΢µ÷£¬Äú¾Í¿ÉÒÔʹÓà Flex SDK °üº¬µÄ Flex Builder ÔÚ Eclipse Öй¹½¨ Flex Ó¦ÓóÌÐòÁË£¬¾¡¹Ü Flex Builder µÄ WYSIWYG UI ±à¼­ºÍµ÷ÊÔ¹¦ÄÜʹ¹¹½¨ Flex Ó¦ÓóÌÐò¸ü¼ÓÈÝÒס£

ʹÓà Eclipse PDT ºÍ AMFPHP£¬Äú¿ÉÒÔ¹¹½¨¹© Flex Ó¦ÓóÌÐòʹÓõķþÎñ¡£Ô¶³ÌÏîÄ¿£¨Ê¹Óà AMF£©ÔÊÐíÄú¿ìËÙ±àд´Ó Flex µ÷ÓÃÔ¶³Ì¶ÔÏóÉϵķ½·¨µÄʼþ¡£

   
3327 ´Îä¯ÀÀ       27
Ïà¹ØÎÄÕ Ïà¹ØÎĵµ Ïà¹Ø¿Î³Ì



Éî¶È½âÎö£ºÇåÀíÀôúÂë
ÈçºÎ±àд³öÓµ±§±ä»¯µÄ´úÂë
ÖØ¹¹-ʹ´úÂë¸ü¼ò½àÓÅÃÀ
ÍŶÓÏîÄ¿¿ª·¢"±àÂë¹æ·¶"ϵÁÐÎÄÕÂ
ÖØ¹¹-¸ÄÉÆ¼ÈÓдúÂëµÄÉè¼Æ
Èí¼þÖØ¹¹v2
´úÂëÕû½àÖ®µÀ
¸ßÖÊÁ¿±à³Ì¹æ·¶
»ùÓÚHTML5¿Í»§¶Ë¡¢Web¶ËµÄÓ¦Óÿª·¢
HTML 5+CSS ¿ª·¢
ǶÈëʽC¸ßÖÊÁ¿±à³Ì
C++¸ß¼¶±à³Ì
×îл¼Æ»®
DeepSeekÔÚÈí¼þ²âÊÔÓ¦ÓÃʵ¼ù 4-12[ÔÚÏß]
DeepSeek´óÄ£ÐÍÓ¦Óÿª·¢Êµ¼ù 4-19[ÔÚÏß]
UAF¼Ü¹¹ÌåϵÓëʵ¼ù 4-11[±±¾©]
AIÖÇÄÜ»¯Èí¼þ²âÊÔ·½·¨Óëʵ¼ù 5-23[ÉϺ£]
»ùÓÚ UML ºÍEA½øÐзÖÎöÉè¼Æ 4-26[±±¾©]
ÒµÎñ¼Ü¹¹Éè¼ÆÓ뽨ģ 4-18[±±¾©]

AndroidÊÖ»ú¿ª·¢£¨Ò»£©
Àí½âJavascript
·ÇµäÐÍajaxʵ¼ù
³¹µ×µÄAjax
javascript ʹÓÃCookies
ʹÓà jQuery ¼ò»¯ Ajax ¿ª·¢


Struts+Spring+Hibernate
»ùÓÚJ2EEµÄWeb 2.0Ó¦Óÿª·¢
J2EEÉè¼ÆÄ£Ê½ºÍÐÔÄܵ÷ÓÅ
Java EE 5ÆóÒµ¼¶¼Ü¹¹Éè¼Æ
Javaµ¥Ôª²âÊÔ·½·¨Óë¼¼Êõ
Java±à³Ì·½·¨Óë¼¼Êõ


ijº½¿Õ¹«Ë¾IT²¿ JavaScriptʵ¼ù
ijµçÊÓÈí¼þ HTML5ºÍJavaScript
Öк½ÐÅ JavaScript¸ß¼¶Ó¦Óÿª·¢
´óÇìÓÍÌï web½çÃæAjax¿ª·¢¼¼Êõ
ºÍÀûʱ ʹÓÃAJAX½øÐÐWEBÓ¦Óÿª·¢