2012-01-25 1 views
0

У меня есть глобальная переменная 'csId' типа string. В приведенном ниже коде функции drawChart(), для цикла for, переменная csID должна быть установлена ​​на «1» с помощью modelLocator, когда i = 0 и csId должно быть установлено на «2» с помощью modelLocator, когда i = 1. (учитывая lengh = 2). Предупреждение в drawchart() (для csId), похоже, печатает правильные значения «csid» (как 1, так и 2), но в dataFunction() «columnSeries_labelFunc». Я всегда получаю значение CsId Alert как «2» и никогда не как '1'.глобальная переменная не получает заданные значения в другой функции в flex

Вы можете найти код ниже: Функция

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

Это происходит потому, что код выполняется асинхронно, когда значение csID уже «2», когда вызывается предупреждение в вашей функции columnSeries_labelFunc. – Angelo

ответ

2

Во-первых: присвоение значения глобальной переменной многократно внутри цикла является плохой идеей. Из этого ничего хорошего не случится.

Трудно сказать из контекста здесь, но, скорее всего, причиной того, что вы с этой проблемой является то, что поток выполнения выглядит следующим образом:

  1. DrawChart() выполняет синхронно, отсчитывая через каждый шаг в цикле, создавая ColumnSeries, каждый из которых недействителен, то есть они будут перерисовываться на следующем кадре. Функция заканчивается, csID при последнем значении, которое она удерживает.

  2. Приложение переходит к следующему этапу в elastic racetrack и проверяет недействительные компоненты.

  3. columnSeries_labelFunc вызывается, csID все еще удерживает значение терминала из цикла.

Конечным результатом является то, что columnSeries_labelFunc не вызывается до тех пор, пока вы не закончите полностью рисовать drawChart.

Простейшим решением было бы прочитать идентификатор, который вы устанавливаете в серии в функции метки, вместо того, чтобы вообще полагаться на глобальную переменную.