2013-04-18 52 views
0

好的,我有一個叫changeHandler的函數 - 它被其他函數中的幾個eventListeners調用。我想寫幾個if語句來評估函數調用的來源,並根據原始函數更改我的ComboBoxdataProvider。例如:的許多功能中的一個被稱爲displayCarbs(),並且具有像這樣的事件監聽:評估函數調用發起的位置

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

(I已移除所有不必要的代碼的從上面的功能)

changeHandler內的if語句將是這個樣子:

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

我已經搜查高和低的東西,可以做到這一點,但我只是沒有AS3或詞彙的好足夠的把握來形容形容我的意思是從Google獲得答案。

+0

是否知道哪個ComboBox發送該事件? – prototypical

+0

@prototypical:我有6個函數叫做'displayCarbs','displayMeat','displayVegetables'等。這些函數向舞臺添加了一個ComboBox,但是'changeHandler'函數在每個ComboBox的第一個實例上偵聽SelectedLabel 「Category」頁面不等於'null',以便ComboBox的新實例出現在下面。除了第一個ComboBox的dataProvider每個都不相同之外,它們都非常相似。 – adaam

+0

(因此,請在回答上述問題時作出我的解釋) – adaam

回答

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 
} 

檢查如果反對聲明字符串時,我不記得現在如果你需要==或只是=

+0

這工作得很好。非常感謝你! – adaam

+0

當你檢查一個對象時,你需要'=='。 '='會將_always_設置第一個對象等於第二個對象,而不管數據類型是否在條件或不在。 –

+0

Do .. ..你是對的。我現在笑我的最後一行。 –

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是一個類成員變量,因此它在處理程序中有作用域。

+0

謝謝你的回答,這對我來說是合乎邏輯的。當我重構代碼時,我會在設計過程結束時嘗試並實現它 – adaam