ajax 說到Flash與Ajax不免要會惹來熱鬧的爭論。用google搜搜就有很多這樣的文章,這裡我就不引用了。不過,我還是想提一下 Luar 寫的 ‘展望2006年,Flash未來未有來!’這篇blog,裡面的看法我很贊同。同時Luar作為Flash的資深開發人員,他的言論是很有見地的。
看完Luar的文章,你一定會有些悲觀。Flash到底還能走多遠?哎,還是不要想這樣的問題了。我的看法還是比較樂觀的。
首先,來看看Ajax。經過幾個月的關注,我的理解是:Ajax的重點有兩個,一是與伺服器的無重新整理傳遞訊息,另一個是對dhtml的擴充(或者說是深度開發)。ajax裡,Javascript在瀏覽器中就像FlashPlayer裡的AS2.0,FlashPlayer就好象是MM的瀏覽器。這樣的比喻我認為很適合。這樣想想就會明白,在瀏覽器的環境裡JS可以做很多AS不能做的事,而且JS比AS更加成熟。所以JS的優勢和廣闊的前景是很明顯的。
通過Flash平台用戶端的開發,我發現Flash的優勢有一部分與Ajax重疊了。比如,與伺服器的無重新整理傳遞訊息,以及使用者離線和線上狀態的無縫切換。除了對CSS的支援和文字表格表現上的劣勢,FLash還是可以媲美Ajax的。另外,Flash最大的有點在於開發的低門檻。Flash有完備的IDE和調試環境,同時在還可以滿足MVC的設計模式,它所見所得的開發環境更得到美工的青睞。
除了以上的對比,我想象我這樣喜愛Flash的愛好者只所以支援他的主要原因還在與,他的成長速度。從4.0到8.0幾乎每次的升級都讓人為之興奮。
附錄:在這裡貼上,我平台開發中用到的與webserver通訊的類檔案。 import AndyClass.ArrayToXml;
import mx.events.EventDispatcher;
import org.okyere.util.XMD;
class AndyClass.FlashConnAsp extends MovieClip
{
//該類用於接受Flash發送的Array變數
//Array變數通過ArrayToXml類轉換為要發送的XML;
//如果調用成功,則返回my_xml的內容!!!!
//屬性域
private var m_Url : String;
private var m_Params : Array;
private var m_Params_str : String = "";
private var m_Result_errormsg : String;
private var m_NodeName : String
private var m_urlhead : String;
private var m_xmd : org.okyere.util.XMD;
//private var myListener : Object = new Object ();
private var m_Result : String //具體的結果
//屬性域
public var addEventListener : Function;
public var removeEventListener : Function;
private var dispatchEvent : Function;
private static var _mixin1 = EventDispatcher.initialize (AndyClass.FlashConnAsp.prototype);
public function FlashConnAsp ()
{
trace (" FlashConnAsp 構造 " );
}
//Setter Getter
public function set Url (txt : String) : Void
{
m_Url = txt;
}
public function get Url () : String
{
return m_Url;
}
public function set Params (a : Array) : Void
{
m_Params = a;
}
public function set Params_str (a : String) : Void
{
m_Params_str = a;
}
public function set ResultMsg (a : String) : Void
{
m_Result_errormsg = a;
}
public function set NodeName (a : String) : Void
{
m_NodeName = a;
}
//
public function sendAndload ()
{
if (m_Url != null && m_Url != undefined&&m_urlhead != undefined)
{
f_sendAndload ();
} else if (m_urlhead == undefined)
{
trace ("m_urlhead未定義")
f_load_urlhead ();
}
}
//
private function f_load_urlhead ()
{
var owner : Object = this;
m_xmd = new XMD ();
m_xmd.load ("config.xml");
var myListener = new Object ();
myListener.onXMDLoad = function (evtObj : Object)
{
//trace ("擷取config.xml的參數 urlhead 成功: " + evtObj.data.url);
owner.m_urlhead = evtObj.data.url;
owner.f_onDataLoadXml ()
owner.m_xmd.removeEventListener ("onXMDLoad", myListener);
owner.f_sendAndload ();
};
m_xmd.addEventListener ("onXMDLoad", myListener);
}
private function f_sendAndload ()
{
var eventObj01 : Object = {
type : "m_onLoadVars", target : _parent
};
dispatchEvent (eventObj01);
var owner :&nb
[1] [2] 下一頁