網站 / 論譠 :
Download the Android SDK

Google Android 論壇

Android手机网 Android软件 Android壁纸 Android游戏 Android下载

Open Android - Android 手機新聞論壇

中文輸入法 :
科科輸入法 (改) : 嘸蝦米輸入法

科科輸入法

嫩輕鬆輸入法

Other :
G1 News Twitter

最近在看Zend framework..
順便把一些找到的資源整理一下。
Zend Framework
Zend Framework 教程大全(英文版)
Zend Framework China - Zend Framework 中文站

陸續再補上。

AS3的remoting不支援recordSet囉...那什麼是recordset?
在as2時:
PHP端

$query = 'SELECT * FROM `News`";
return mysql_query($query);

FLASH
function onResult(result:Result)
{
trace(result.items[i].news_title);
//就可以直接得到值了。
}


那到了AS3時,因為改採用AMF3的格式,我們會發現傳回來的資料和以前的不太一樣。
如下圖:

回傳的東西會包在 serverInfo裏。
資料會存在initialData,欄位名稱存在columnNames。
乍看之下,感覺變麻煩了。我們還得自己製作「組合」的動作。
才能像以前一樣的使用。

pdf文件:AMF 3 Specification

以下是我目前正在使用的remoting class
AS3

Remoting.as:
package
{
import flash.events.Event;
import flash.net.NetConnection;
import flash.net.ObjectEncoding;
import flash.net.Responder;

import ArrayCollectionDP;
public class Remoting extends NetConnection
{
/*VARIABLE*/
private static var m_instance:Remoting
private static var m_constructorLocked:Boolean = false;
private var m_eventName:String;
private var m_data:Object;

/*CONSTRUCTOR*/
public function Remoting()
{
if( m_constructorLocked )
{
throw new Error( "Remoting is a singleton" );
}
}

/*PUBLIC*/
public static function GetInstance():Remoting
{
if( m_instance == null )
{
m_constructorLocked = false;
Remoting.m_instance = new Remoting();
m_constructorLocked = true;
}
return Remoting.m_instance;
}

public function Init():void
{
objectEncoding = ObjectEncoding.AMF3;
connect(yourGatewayPath);
}

public function GetResult():Object
{
return m_data;
}

public function GetData(a_funcName:String='',a_eventName:String=""):void
{
m_eventName = a_eventName
var responder:Responder = new Responder(onResult, onFault);
this.call(YouServiceName+"."+a_funcName, responder);
}


/*PRIVATE*/
private function onResult(result:Object):void
{
m_data = ArrayCollectionDP.ToObject(result);

if (m_eventName != "")
{
dispatchEvent(new Event(m_eventName));
}

}
private function onFault(fault:Object):void
{
trace(String(fault.description));
//this.dispatchEvent({type:"onDataError"});
}
}


}


ArrayCollectionDP.as:
package{

public class ArrayCollectionDP {

public static function ToObject(a_arrayCollection:Object)
{

var initialData:Array = a_arrayCollection.serverInfo.initialData;

var category:Array = a_arrayCollection.serverInfo.columnNames;

var dataAry:Array = new Array();

var i:int;

for (i = 0; i < initialData.length; i++)
{

dataAry[i] = new Object();

for (var aIndex:* in category)
{

dataAry[i][category[aIndex]] = initialData[i][aIndex];

}

}

return dataAry

}

}

}


其他class要使用Remoting時

Main.as:
package {
import Remoting;
public class Main extends MovieClip
{
public function Main()
{
Remoting.GetInstance().Init();
Remoting.GetInstance().GetData('GetExam','GetData');
Remoting.GetInstance().addEventListener('GetData', GetDataHandler)
}
private function GetDataHandler(e:Event)
{
var m_obj = m_remoting.GetResult()
}
}


提供2個Debuggers的工具。
ServiceCapture
Charles Web Debugging Proxy

ExamBase.as

protected function SetAnsHandler(a_event:Event=null):void
{
mc_submit.visible = true
SetLock(a_event.m_target);
}


Alpha.as extends ExamBase
override function SetAnsHandler(a_event:AlphaEvent):void
{
super.SetAnsHandler(a_event)
//something
}


出現error 1023: Incompatible override.

原因是丟進去的變數,屬性不同的關係。

查了一下資料和文章,發現原來override時,不允許丟進來的參數和父類別不相同
節錄一下help的文字:
To override an inherited method, you must use the override attribute 
and ensure that the name, number,
type of parameters, and the return type match exactly.


那如果要達到原本的需要,要朝向overload的方面去做,但as3又不支援overload。
所以有幾篇文章是教如何「模仿」overload的效果。

AS3笔记(8),关于方法重载
[转]AS3类 - 重载的实现

我自己完完全全的使用gmail來收發我所有的email了。
但gmail一直以來麻煩的就是不能任何的在email裏面插入html。
雖然陸陸續續有很多工具像better gmail 但也在升級到2.0版後。
在簽名檔使用html的功能也不見了。
這幾天找了一個外掛叫做GreaseMonkey
這支外掛乍看之下,好像沒什麼功能。後來從google上找到,才知道這個外掛很厲害的
他可以在網頁裏使用自己的javascript。

Gmail - Insert HTML Signature
要按右上角的Install this Script.
然後到你的gmail,你可以看見左邊會多出一個Html Signature。如圖:


就可以自行編行你的簽名檔啦。

當你發佈時,發生「A conflict exists with definition xxxx in namespace internal.」。
其中的 xxxx 是變數名稱。表示你重複宣告了。

但明明就在Main.as裏寫了public var xxxx;
而且只寫一次,怎麼會重複。

這是請檢查Publish Setting -> Flash -> ActionScript3.0 setting -> Automatically declare stage instance.
是不是打勾了。



最近在練習寫AS3,要適應一下新的寫法,目前遇到了一個怪現像。
通常要讓movie clip , MOUSE_OVER會有手指頭時,只要下一個
mc.buttonMode= true 就解決了。
但實作上,如果我的class 不extends MovieClip 或Button的話。
卻出不來,程式如下:

 /*CONSTRUCTOR*/
public function AlphaItem(a_mc:MovieClip,a_num:Number,a_str:String)
{
m_target = a_mc;
m_target.buttonMode = true
/*加上這個就好了*/
m_target.mouseChildren = false;

m_char=a_str;
m_data=a_num;
m_target.addEventListener(MouseEvent.MOUSE_DOWN,MOUSE_DOWN);
m_target.addEventListener(MouseEvent.MOUSE_OVER,MOUSE_OVER);
m_target.addEventListener(MouseEvent.MOUSE_OUT,MOUSE_OUT);
SetData();
}

2008.04.17
附註:
由於我的MovieClip裏面。除了有一個background之外還有2個文字框。
所以只靠buttonMode=true是不可以的。

奶綠
因為氣泡事件,所以會去抓到該元件裡的dynamic文字 
所以加上mouseChildren = false;
把子系的mouse感應通通取消即可