0

好的,所以我有一个名为的函数changeHandler- 它由其他函数中的几个 eventListeners 调用。我想编写几个if语句来评估函数调用的来源并根据原始函数更改dataProvidermy的。ComboBox示例:调用多个函数之一displayCarbs()并具有如下事件监听器:

function displayCarbs(event:MouseEvent):void {
myComboBox.addEventListener(Event.CHANGE, changeHandler);
}

(我已经从上面的函数中删除了所有不必要的代码)

里面的if语句changeHandler看起来像这样:

if (****referring function = displayCarbs****) {
    myComboBox2.dataProvider = new DataProvider(carbItems);
    }

我一直在寻找可以实现这一目标的东西,但我对 AS3 或词汇的掌握不够好,无法描述我从谷歌获得答案的意思。

4

2 回答 2

1

我知道已经有一个公认的答案,但是根据我对问题的了解,这是一个不需要添加另一个变量来检查的解决方案:

function displayCarbs(event:MouseEvent):void 
{
  myComboBox.addEventListener(Event.CHANGE, changeHandler);
}

function changeHandler(event:Event):void 
{
     var comboBox:ComboBox = event.target as ComboBox;

     if (comboBox.dataProvider == uniqueProvider)
     {
           myComboBox2.dataProvider = new DataProvider(appropriateItems);
     }
}

如果第二个 dataProvider 是基于第一个 dataProvider 确定的,这应该可以工作。这当然要求您的 uniqueProvider 是一个类成员变量,因此它在处理程序中具有范围。

于 2013-04-18T19:26:20.110 回答
1

我能想到的最简单的方法......你不能简单地创建一个文本字符串,在去 changeHandler 之前更新到函数的名称,然后 changeHandler 可以检查字符串内容并采取相应的行动..

public var referring_function:String;

function displayCarbs(event:MouseEvent):void 
{
  referring_function = "displayCarbs";
  myComboBox.addEventListener(Event.CHANGE, changeHandler);
}

function displayCarbs(event:Event):void 
{
  if (referring_function == "displayCarbs") 
  { myComboBox2.dataProvider = new DataProvider(carbItems); }
  if (referring_function == "displayOthers") 
  { myComboBox2.dataProvider = new DataProvider(otherItems); }
  // etc etc
}

我现在不记得您是否需要==或只是=在检查If 语句与字符串时。

于 2013-04-18T18:49:23.370 回答