为什么我不能在Flash CS4中的回调方法中访问组合框?

时间:2009-02-17 20:45:03

标签: flash actionscript-2 flash-cs4

查看此代码:

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

关于为什么我无法从回调中获取组合框的任何想法?

1 个答案:

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