3

看看这段代码:

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

关于为什么我无法从回调内部进入组合框的任何想法?

4

1 回答 1

2

好的,所以首先看起来你正在使用 AS2。

因为它是 as2,所以问题可能是范围问题。作用域在 as2 到 as3 中的工作方式不同。回想我的 as2 天,当你设置这个回调函数时,你就在 costGuideXML 的范围内。由于您在此范围内,因此您无权访问 my_acc 变量。

您可能需要使用 Delegate 类来使 populateAccordian 方法在原始类的范围内执行(如果它在时间轴上,则可能是一个影片剪辑)。

类似的东西(虽然这是未经测试的):

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...
    }
于 2009-02-17T21:12:11.410 回答