глобальная переменная не получает правильные значения в другой функции в flex - PullRequest
0 голосов
/ 25 января 2012

У меня есть глобальная переменная csId типа строки. В приведенном ниже коде функции 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' .

Пожалуйста, найдите код ниже:

функция 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;


  }   

Пожалуйста, помогите !!!

1 Ответ

2 голосов
/ 25 января 2012

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

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

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

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...