2013-04-18 3 views
0

좋아요, 그래서 changeHandler이라는 함수가 있습니다 - 다른 함수에서는 여러 eventListeners에 의해 호출됩니다. 함수 호출의 소스를 평가하는 여러 if 문을 작성하고 원래 함수에 따라 이 내 ComboBox으로 변경됩니다. 예 : 많은 기능 중 하나는 displayCarbs()라고 그래서 같은 EventListener를 가지고있다 : 함수 호출이 어디에서 시작되었는지 평가

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

(I 위의 함수에서 불필요한 코드를 모두 제거했습니다을)를 changeHandler 내부의 if 문 것이다 이 같은보고 :이 달성 할 수있는 무언가에 대한 높고 낮은 검색 한

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

,하지만 난 그냥 무엇을 설명 설명하는 AS3이나 어휘의 충분한 이해가없는 Google의 답을 얻으려는 것입니다. 당신은 단순히 다음 차례 changeHandler에 changeHandler에 가기 전에 함수의 이름에 대한 업데이트 문자열의 내용을 확인하고 그에 따라 행동 할 수있는 텍스트 문자열을 만들 수 없습니다 내가의 ... 생각할 수

+0

어떤 ComboBox가 이벤트를 전달했는지 알고 싶습니까? – prototypical

+0

@protypypical : 저는 displayCarbs, displayMeat, displayVegetables 등 6 개의 함수를 가지고 있습니다.이 함수들은 ComboBox를 무대에 추가하지만,'changeHandler' 함수는 각각의 ComboBox의 첫 번째 인스턴스에서 SelectedLabel을 청취합니다 콤보 상자의 새 인스턴스가 아래에 나타나도록 "범주"페이지가 "null"과 같지 않습니다. 첫 번째 ComboBox에 대한 dataProvider가 각각 다르다는 점을 제외하고는 모두 서로 매우 유사합니다. – adaam

+0

(그래서 위의 질문에 대한 답으로 내 설명의 내용을 작성하십시오.) – adaam

답변

1

가장 간단한 방법 ..

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 
} 

==이 필요하거나 =이 표시되면 을 확인할 때 기억이 안납니다. 문자열에 대해 문을 사용하는 경우.

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); 
    } 
} 

이이 경우에 작동합니다 :

+0

아주 잘 작동합니다. 고마워요! – adaam

+0

하나의 객체를 다른 객체와 비교할 때 _always_'=='이 필요합니다. '='는 항상 첫 번째 객체를 두 번째 객체와 동일하게 설정합니다 (데이터 유형이나 조건부에 상관없이). –

+0

Doh .. !! 네가 옳아. 나는 지금 내 마지막 줄을 비웃고있다. –

1

나는 이미 허용 응답이 알고 있지만, 나는이 문제에 대해 수집 된 내용을 기반으로, 여기에 확인하는 또 다른 변수를 추가 할 필요가있는 솔루션입니다 2 번째의 dataProvider는, 최초의 dataProvider에 근거 해 결정됩니다. 물론 이것은 고유 한 Provider가 클래스 멤버 변수이기 때문에 핸들러 내에 범위를 가지고 있어야합니다.

+0

답장을 보내 주셔서 감사합니다. 코드를 리팩터링 할 때 디자인 프로세스가 끝날 때이를 구현하고 구현합니다. – adaam

관련 문제