addEventListener() & removeEventListener() tips
今天遇到一個奇怪的bug,花了快三小時追蹤後才發現原來是錯在完全想不到的地方。
在flex裏面建立一個 event listener 時可用
obj.addEventListener( “change”, onChange );
這代表是偵聽事件從底層 bubbling up 後的情況。
但有時為了處理比較複雜的狀況,我們必需要用這種方式偵聽
obj.addEventListener( “change”, onChange, true );
第三個 true 代表 useCapture, 也就是在事件剛發生的 capturing 階段就攔擷下來並先做處理。
要注意的是在 AS3 的 event model 裏 useCapture = true|false 是被視為兩個不同的事件,因此將來 removeEventListener() 時,也要乖乖的加上第三個參數,例如當初設定 useCapture = true,移除時就要用
obj.removeEventListener( “change”, onChange, true );
而今天踩到的地雷則是
1、事件名稱寫錯,例如把 MOUSE_DOWN 寫成 MOUSE_UP,至於寫錯的原因則是因為在長期的開發過程中試用了不同的處理手法,結果改了別處忘了這裏
2、忘了加上 useCapture = false 在 removeEventListner() 裏面。
3、一開始觀察 bug 時完全不會想到是這種地方有錯,而是先從其它地方找起,等三個小時過去已排除所有其它可能後,才終於發現好像是 mouse event 反應不太對勁,這時五分鐘就解決了,只能說這一切都是命啊~~~
by admin


3 Comments Add your own
1. sike&hellip | May 9th, 2007 at 5:15 pm
莫非定律,:P
2. sboomer&hellip | May 9th, 2007 at 11:44 pm
老師,想請教個問題。
第一,現在有沒有for java opensource AMF3的東西。
第二,用FLEX 2.0開發時,我用box模擬一個table,因為我需要做到固定表頭,與第一個column的效果。但是,我發現到跑的很慢也就算了,資料量一多就掛點了,有無其他改進方法。
3. jeremy&hellip | May 10th, 2007 at 12:12 am
hey sboomer, 好久不見,最近我常坐你們家飛機往返美西,空姐品質有進步但座位還是太小,塞在裏面13小時很苦啊~
#1
有,兩個
-granite data services
-red5 裏面也有 AMF3 module 可直接拿 jar 出來用
#2
這個問題你很久前問過,後來其實我有找到答案但忘了回給你,真是對不住。
其實 DataGrid 有內建這個功能,叫做 lockedColumnCount 與 lockedRowCount, 你可以在 ListBase class 裏面找到它們的用法。
Trackback this post | Subscribe to the comments via RSS Feed