评估函数调用的来源

时间:2013-04-18 18:09:23

标签: actionscript-3 flash-cs6

好的,我有一个名为changeHandler的函数 - 它由其他函数中的几个eventListeners调用。我想编写几个if语句来评估函数调用的来源,并根据原始函数更改dataProvider的{​​{1}}。示例:许多函数中的一个被称为ComboBox,并且具有如下的eventListener:

displayCarbs()

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

function displayCarbs(event:MouseEvent):void { myComboBox.addEventListener(Event.CHANGE, changeHandler); } 中的if语句将如下所示:

changeHandler

我已经搜索了能够实现这一目标的高低,但我对AS3或词汇没有足够的把握来描述我从谷歌那里得到答案的含义。

2 个答案:

答案 0 :(得分: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语句时需要===,我现在无法记住。

答案 1 :(得分: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是一个类成员变量,因此它在处理程序中具有范围。