2012-01-25 3 views
0

문자열 유형의 전역 변수 'csId'가 있습니다. drawChart() 함수 아래의 코드에서 for 루프에서 i = 0 일 때 modelLocator에서 csID 변수를 '1'로 설정하고 i = 1 일 때는 modelLocator에서 csId를 '2'로 설정해야합니다 (길이 = 2). drawchart() (csId)의 경고가 올바른 'csid'값 (1과 2)을 인쇄하지만 dataFunction()의 columnSeries_labelFunc에서 '항상 csId Alert 값을'2 ' '1'.전역 변수가 다른 변수의 적절한 값으로 설정되지 않음

찾아주세요 아래 코드 :

drawchart() 함수 ::

public function drawChart():void 
{ 
    var cs:ColumnSeries= new ColumnSeries();           

    var lenght:Number=AppModelLocator.getInstance().ctsModel.productSummary.getItemAt(0).collMgmtOfcList.length; 
    myChart.series = [cs]; 
    var tempObj:Object; 

    for(csLoop=0;csLoop<lenght;csLoop++) 
    { 
    cs = new ColumnSeries(); 
    this.csId= new String(String(AppModelLocator.getInstance().ctsModel.productSummary.getItemAt(0).collMgmtOfcList[csLoop])); 

    Alert.show("csId="+this.csId); 
    cs.id=this.csId; 
    cs.displayName = 'Exposure'; 
    cs.dataFunction=columnSeries_labelFunc; 
    myChart.series[csLoop] = cs; 

    } 

columnSeries_labelFunc() 함수 ::

private function columnSeries_labelFunc(series:Series, item:Object, fieldName:String):Object { 
    var col:Number=0; 
    Alert.show("value of csid in columnSeries_labelFunc="+this.csId); 
    if(fieldName == "yValue" && series.id==csId){ 
     return(item.exposureUSDList[0]); 
    }else if(fieldName == "yValue" && series.id==csId) { 
     return(item.exposureUSDList[1]);  
    }else if(fieldName == "xValue"){ 
     return(item.rptType); 
    }else 
     return null; 


    } 

제발 도와주세요!

+0

경고는 열 Series_labelFunc 함수에서 호출 될 때 csID 값이 이미 "2"라는 코드가 비동기 적으로 실행되기 때문에 발생합니다. – Angelo

답변

2

첫 번째 : 루프 내에서 반복적으로 전역 변수에 값을 할당하는 것은 좋지 않습니다. 그로부터 좋은 일은 일어나지 않을 것입니다.

은 여기 문맥에서 말하는 힘들지만,이 문제가 발생하는 가장 가능성있는 이유는 실행의 흐름은 다음과 같이이다이다 :

  1. drawChart()를 통해 계산, 동 기적으로 실행 루프의 각 단계에서 각각 무효화 된 ColumnSeries를 만듭니다. 즉, 다음 프레임에서 다시 그리기를 의미합니다. 함수는 마지막 값을 csID와 함께 끝냅니다.

  2. 앱은 elastic racetrack의 다음 단계로 전환되고 무효화 된 구성 요소를 확인합니다.

  3. columnSeries_labelFunc

    CSID는 여전히 루프에서 단말기 값을 잡고, 불린다.

최종 결과는 drawChart에서 이미 완전히 완료 될 때까지는 열이 아닌 SeriesSeries_labelFunc가 호출되지 않는다는 것입니다.

간단한 수정은 오히려 전혀 전역 변수에 의존하지 않고, 라벨 기능의 시리즈를 설정하는 ID를 읽을 수있을 것이다.

관련 문제