Как назначить dataGrid другим dataGrid во Flex. а = б не работает - PullRequest
1 голос
/ 13 мая 2011

во Flex У меня есть что-то вроде этого:

  var dg:DataGrid = new DataGrid();    
  if (something) dg = dg1 else if (something_2) dg = dg2;
  dg.dataProvider.getItemAt(3).id;    

и dg ВСЕГДА указывает на DataGrid (даже если dg1 имеет имя DataGrid_test и dg2 = DataGrid_test2) и, наконец, действиесделано на моем первом DataGrid (DataGrid_test).Зачем?Как я могу передать dg1 или dg2 на dg?

Здесь вставлен практически полный код этой части приложения.Я отредактировал это, чтобы сделать это более ясным.

    var dg:DataGrid = null; 
    if ( currentState == "state1" ) { //if this condition is true then app. go into if and
        dg = dataGrid_first; // make dg = DataGrid (1)
        test.text = "inco";  // shows "inco" in "test" label
    } else if ( currentState == "state2" ) { // if this is true then app. go..
        dg = dataGrid_second; //here and set dg as DataGrid (exactly!) (2)
        test.text = "outgo"; // and change test label into blank text (earlier text disapears)
    }
    search(dg);

Это изменено с советом '@splash', все еще не работающим.

РЕДАКТИРОВАТЬ: я сделал это изменение для того, чтобы отвечать за все Выкто мне в этом помогает :) Я думаю, что это будет лучшим способом.В кодоблоке выше я добавил комментарии.(пожалуйста, прочитайте сейчас комментарии и после этого возвращайтесь сюда :)) Теперь я объясню, что именно происходит.Я отлаживал его много раз, и вот результаты: dg указывает на DataGrid (как компонент в flex, а не на dataGrid_first), мне нужно было расширить DataGrid, так что теперь это компонент ColorColumn (я не знаю, правильно ли я его вызвал), а не DataGrid.И dg указывает на ColorColumn, а не на dataGrid_first или dataGrid_second.Я даже сегодня попробовал то же самое, что предлагает @splash:

if ( currentState == "state1" ) { 
    test.text = "inco"; 
    search(dataGrid_first); 
} else if ( currentState == "state2" ) {
    test.text = "outgo";
    search(dataGrid_second);
}

и поиск по-прежнему указывает на ColorColumn: / Моя проблема действительно проста - я просто хочу перейти к поиску различных dataGrid для каждого состояния.Если у Вас есть другие идеи, как я могу сделать это правильно, я буду рад услышать об этом.:) Но все же я не понимаю, почему это не работает.Моя поисковая функция использует алгоритм Бойера-Моора для поиска текста в dataGrid.dataProvider.Если он что-то находит, он помещается в новый массив, и после передачи всего dataProvider я раскрашиваю строки с помощью искомого слова.

Ответы [ 2 ]

1 голос
/ 14 мая 2011

Я бы предложил написать это - поскольку я предполагаю, что должен быть назначен либо dg1, либо dg2:

if (something) {

    dg = dg1;

} else {

    dg = dg2;

}

Могут быть случаи, когда if () {} else () {} не выполняетпервый или второй условный блок.

Наконец, небольшая подсказка, которая структурно устраняет нежелательные присваивания в следующих условиях: Всегда записывать литерал слева от операции сравнения: if ( "state1" == currentState ).Если вы случайно набрали = вместо ==, гибкий компилятор выдаст ошибку.Другая запись молча присваивает значение.

Дополнительно: Вы пошагово просматривали свой код и смотрели переменные dg1, dg2 и dg?Если нет, установите точку останова за несколько строк до оператора if и с этого момента выполняйте пошаговый код.Что вы видите?

Вот еще один совет: используйте утверждения для проверки несоответствий:

package my.company.utilities {

  public function assert(expression:Boolean):void {

      // probably conditionally compile this statement
      if (!expression) {
          throw new Error("Assertion failed!");
      }

  } // assert

}

Используйте его, например, в начале метода, подобного этому:

public function doTransaction( fromAccount:int, toAccount:int ) {

  assert( 0 < fromAccount );
  assert( 0 < toAccount );

}

Обычно хорошее использование assert - проверка переменных на предмет их диапазона.Как в приведенном выше примере, fromAccount и toAccount всегда должны быть положительными.Из-за ошибки неправильные значения могут быть переданы в doTransaction ().В этом случае утверждение выдает ошибку.

1 голос
/ 13 мая 2011

Если dg никогда не указывает на dg1 и dg2, тогда ваши выражения (something) могут быть оценены как false. Проверьте значение ваших if-условий - это должно быть легко отладить.

Это должно работать:

var dg:DataGrid = null;    
if (something) 
    dg = dg1;
else if (something_2) 
    dg = dg2;
if (dg)
{
    // do something with dg
}

[Update]

Я до сих пор не понимаю, почему ваш код не работает, но вы можете упростить его так:

if ( currentState == "state1" ) { 
    test.text = "inco"; 
    search(dataGrid_first); 
} else if ( currentState == "state2" ) {
    test.text = "outgo";
    search(dataGrid_second);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...