作为参考,这是我今天早些时候提出的关于同一项目的问题:Reference objects on stage/frame from document class
addFrameScript似乎做了我需要的东西,除了一件事。在我传递的函数作为框架脚本添加时,我想为按钮动态创建一些事件监听器,但我希望关闭监听器函数的变量不按预期运行 - 它们都最终有最后一个指定变量的值而不是定义函数时的值,就像不同的范围规则生效一样:
addFrameScript(node_frame - 1,
function() {
stop();
question_txt.text = node_question;
answers_xml = node_xml.answer;
for (var i:Number = 0; i < answers_xml.length(); i++) {
button = getChildByName('answer' + (i+1) + '_btn');
if (answers_xml[i].attribute('node')) {
goes_to = answers_xml[i].attribute('node');
trace(goes_to);
button.addEventListener('click',
function() {
trace(goes_to);
});
}
}
});
首先是跟踪输出:
1A
2A
3A
但之后,如果我点击三个按钮中的任何,他们所有跟踪:
3A
任何人都对这里发生的事情有什么了解和/或我如何解决它?框架脚本是否观察到不同的(动态的而不是词法的?)范围界定的东西?
答案 0 :(得分:2)
不,添加的框架脚本中的范围与AS3中的其他任何位置完全一样。 Flash后期绑定变量,但是您正试图访问它们,就像它们在侦听器中的早期绑定一样。
奇怪的是,我今天早些时候在这里回答了同样的问题:How do you bind a variable to a function in as3
有关更多信息,我在这里写了一篇关于此类事情的博文:http://www.scriptocalypse.com/?p=31