全局变量未在flex中的另一个函数中设置适当的值

时间:2012-01-25 15:18:53

标签: flex flex3

我有一个字符串类型的全局变量'csId'。在drawChart()函数下面的代码中,在for循环中,当i = 0时,modelLocator应将csID变量设置为'1',当i = 1时,csId应由modelLocator设置为'2'。(考虑到lengh = 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()function ::

  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;


  }   

请帮助!!!

1 个答案:

答案 0 :(得分:2)

首先:在循环内重复为全局变量赋值是个坏主意。从那以后就什么都不会发生。

从这里的上下文中很难说,但是你遇到这个问题的最可能的原因是执行流程如下:

  1. drawChart()同步执行,计算循环中的每一步,创建ColumnSeries,每个ColumnSeries都会失效,这意味着它们将在下一帧重绘。该函数结束,csID保持最后一个值。

  2. 该应用程序进入elastic racetrack的下一步并验证无效的组件。

  3. 调用columnSeries_labelFunc,csID仍然保持循环中的终值。

  4. 最终结果是在您完成drawChart之前,不会调用columnSeries_labelFunc。

    最简单的解决方法是读取您在标签函数中对系列设置的ID,而不是完全依赖于全局变量。