2009-02-17 7 views
3

Проверьте этот код:Почему я не могу получить доступ к combobox в методе обратного вызова во Flash CS4?

import mx.core.View; 
var accordianPane = my_acc.createSegment("mcElectrical", "panel0", "Electrical", "payIcon"); 
accordianPane.comboBox.addItem("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... 
} 

Любые идеи о том, почему я не могу попасть в поле со списком внутри обратного вызова?

ответ

2

Хорошо, сначала первое, что похоже на yo, используют AS2.

Поскольку это как2, проблема, вероятно, является проблемой. Сфера действия работает по-разному в 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... 
    } 

 Смежные вопросы

  • Нет связанных вопросов^_^