我正在构建一个Flash面板,当它在Flash IDE中处于活动状态时从.fla中读取元数据。此面板还在.fla中存储元数据,这没有问题。有问题的是我不知道如何阻止事件监听器监听onDocumentChange。
我希望它只要它是开放的就可以收听它,但是当它关闭时它应该自行清理,因为每次选择新文档时尝试读取元数据都不是一件好事。
我试图在面板中侦听所有类型的事件,以检测用户何时关闭它,但没有成功。
任何人都知道这件事吗?
答案 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;
}