JSFL - чтение метаданных onDocumentChanged - PullRequest
0 голосов
/ 24 марта 2011

Я создаю флеш-панель, которая читает метаданные из .fla, когда она активна в Flash IDE.Эта панель также хранит метаданные в .fla, и это не проблема.Проблема в том, что я не знаю, как остановить прослушиватель событий от прослушивания onDocumentChange.

Я хочу, чтобы он слушал его, пока он открыт, но когда он закрыт, он должен очищаться после себя, потому что пытаться читать метаданные каждый раз, когда выбирается новый документ, не очень хорошая вещь.

Я пытался прослушать все виды событий на панели, чтобы определить, когда пользователь закрывает ее, но безуспешно.

Кто-нибудь знает что-нибудь об этом?

Ответы [ 3 ]

3 голосов
/ 21 октября 2011

Я проделал большую работу с событиями в JSFL, и печальная правда в том, что система несовершенна. События документа хороши, но события слоя и фрейма очень ненадежны; выполнение в неправильном порядке, события слоя не запускаются, когда вы выходите из редактирования, и т. д., и т. д.

Опрос с панели часто является лучшим способом сделать это, и это не такой удар по производительности.

События документа, однако, в порядке. Документация о том, как их удалить, неверна, см. Пост Дру Кеппла здесь о том, что вы должны сделать:

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

1 голос
/ 24 марта 2011

Хм, если вы можете хранить метаданные в .fla (или в любом случае иметь какой-то уникальный идентификатор), вы можете проверить в прослушивателе событий, если документ с этим еще как-то открыт?.fla и перед выполнением какой-либо работы в слушателе проверяет существование, чтобы увидеть, открыт ли файл.Если нет, удалите прослушиватель, если да, запустите обычную обработку событий.

0 голосов
/ 04 июля 2014

В вашей функции слушателя есть еще одна функция, которая проходит по всем SWF-панелям в IDE, проверяя, существует ли имя вашей панели. Если это не так, удалите слушателя и вернитесь из функции слушателя.

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;
}
...