JSFL - 读取元数据onDocumentChanged

时间:2011-03-24 13:23:44

标签: flash actionscript-3 flash-cs4 jsfl

我正在构建一个Flash面板,当它在Flash IDE中处于活动状态时从.fla中读取元数据。此面板还在.fla中存储元数据,这没有问题。有问题的是我不知道如何阻止事件监听器监听onDocumentChange。

我希望它只要它是开放的就可以收听它,但是当它关​​闭时它应该自行清理,因为每次选择新文档时尝试读取元数据都不是一件好事。

我试图在面板中侦听所有类型的事件,以检测用户何时关闭它,但没有成功。

任何人都知道这件事吗?

3 个答案:

答案 0 :(得分:3)

我在JSFL的事件中做了很多工作,可悲的事实是系统存在缺陷。文档事件很好,但是图层和框架事件非常不可靠;以错误的顺序执行,当你退出编辑时没有触发的图层事件等等。

从面板轮询通常是最好的方法,并没有这样的表现。

然而,记录事件是可以的。关于如何删除它们的文档是不正确的,请参阅Dru Kepple的帖子,了解您应该做什么:

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

答案 1 :(得分:1)

嗯,如果你可以在.fla中存储元数据(或者有任何类型的唯一ID)你可以检查事件监听器,如果那个文件仍以某种方式打开吗?

所以基本上指纹.fla并且在监听器中做任何工作之前检查是否存在以查看文件是否打开。如果没有,删除监听器,如果是,则触发正常的事件处理。

答案 2 :(得分: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;
}