2011-03-24 53 views
0

我正在構建一個閃存面板,當它在Flash IDE中處於活動狀態時,它將從.fla中讀取元數據。這個面板也在.fla中存儲元數據,這是沒有問題的。有什麼問題是,我不知道如何阻止事件監聽器監聽onDocumentChange。JSFL - 閱讀元數據onDocumentChanged

只要它是開放的,我希望它能夠監聽它,但是當它關​​閉時,它應該自行清理,因爲每次選擇新文檔時試圖讀取元數據並不是一件好事。

我試圖在面板中偵聽所有類型的事件以檢測用戶什麼時候關閉它,但沒有成功。

有人知道這件事嗎?

回答

3

我在JSFL的事件中做了很多工作,可悲的事實是系統有缺陷。文檔事件很好,但是圖層和框架事件非常不可靠;以錯誤的順序執行,當您編輯出來時層事件不會觸發等等。

面板輪詢通常是實現它的最佳方式,並不會造成這樣的性能下降。

然而,文檔事件都可以。如何刪除這些文件不正確,看你應該做的事情在這裏德魯Kepple的帖子:

http://summitprojectsflashblog.wordpress.com/2010/11/08/jsfl-get-fl-removeeventlistener-to-work/

+0

但是,在再次閱讀我的問題後,我仍然不知道何時將其刪除。如果我關閉了面板(我無法檢測到),並再次打開它,它會添加一個新的監聽器,而舊監聽器仍然會閃爍。但是,ID似乎每次都會增加一個,我猜測它從0開始,所以我總是可以嘗試刪除ID爲0的偵聽器,但如果具有相同功能的另一個面板正在使用,那麼這將不起作用。 。有些時候我需要現在或者當面板關閉或至少能夠檢查它是否打開.. – 2011-10-25 11:44:17

1

嗯,如果你可以在.fla中存儲元數據(或者無論如何都有某種唯一的ID),你可以檢查事件監聽器,如果該文檔仍然以某種方式打開?

因此,基本上要指定.fla,然後在偵聽器中做任何工作檢查存在以查看文件是否打開。如果沒有,請移除監聽器,如果是,請發出正常的事件處理。

+0

感謝您的想法,但問題是,只要面板打開,我需要檢查所有文檔的元數據。 – 2011-03-25 07:39:54

+0

這是一個資源密集型的事情嗎?我想你可以在1-2秒或更高的頻率上做很好的工作,因爲這是一種垃圾收集工作。 – dain 2011-03-25 09:41:20

+0

它根本不會密集,只是在面板沒有打開時讓聽衆保持活躍狀態​​感覺不好。一般來說,知道是否有辦法知道面板何時關閉,以及是否需要清理其他內容。 – 2011-03-25 11:27:49

0

在你的監聽功能包括通過IDE中的所有SWF面板循環的另一個功能,檢查是否您的面板的名稱存在。如果沒有,那麼刪除你的監聽器並返回你的監聽器函數。

function myListenerFunction() { 
    if (!checkForPanel(myPanelName)) { 
     fl.removeEventListener(type, eventID); 
     return; 
    } 
} 

function checkForPanel(arg_panelName) { 

    var target_panelName = arg_panelName; 
    var target_panelsArr = fl.swfPanels; 

    var i; 
    var iLen = target_panelsArr.length; 
    var _swfPanel; 
    for (i = 0; i < iLen; i++) { 

     _swfPanel = target_panelsArr[i]; 

     if ((_swfPanel.name) == target_panelName) { 
      return true; 
     }  
    } 

    return false; 
}