查看此代码:
import mx.core.View;
var accordianPane = my_acc.createSegment("mcElectrical", "panel0", "Electrical", "payIcon");
accordianPane.comboBox.addItem("test");
这会将带有标签“test”的项目添加到影片剪辑中的组合框中。它工作得很好。但是,当我在回调函数中放入相同的代码时,它会失败。
import mx.core.View;
// Load Cost Guide feed.
var costGuideUrl:String = "http://test/cost-guide.ashx";
var costGuideXml:XML = new XML();
costGuideXml.onLoad = function(success) {
if(success) {
populateAccordian(this);
} else {
// Display error message.
}
};
costGuideXml.load(costGuideUrl);
// Populate Accordian with retrieved XML.
function populateAccordian(costGuideXml:XML) {
var accordianPane = my_acc.createSegment("mcElectrical", "panel0", "Electrical", "payIcon");
accordianPane.comboBox.addItem("test");
// This line definitely executes...
}
关于为什么我无法从回调中获取组合框的任何想法?
答案 0 :(得分:2)
好的,首先看起来你好像正在使用AS2。
因为它是as2,问题可能是一个范围问题。范围在as2到as3中的工作方式不同。把我的想法推回到我的as2天,当你设置这个回调函数时,你就在costGuideXML的范围内。当您在此范围内时,您无权访问my_acc变量。
您可能需要使用的是Delegate类,以使populateAccordian方法在原始类的范围内执行(如果在时间轴上,则可能是movieclip)。
类似的东西(虽然这是未经测试的):
import mx.utils.Delegate;
// Load Cost Guide feed.
var costGuideUrl:String = "http://test/cost-guide.ashx";
var costGuideXml:XML = new XML();
costGuideXml.onLoad = Delegate.create(this, xmlLoadedHandler);
costGuideXml.load(costGuideUrl);
function xmlLoadedHandler() : Void
{
populateAccordian(costGuideXml);
}
// Populate Accordian with retrieved XML.
function populateAccordian(costGuideXml:XML) {
var accordianPane = my_acc.createSegment("mcElectrical", "panel0", "Electrical", "payIcon");
accordianPane.comboBox.addItem("test");
// This line definitely executes...
}