Flex Восстановить сетку данных в исходные столбцы, определенные в MXML - PullRequest
0 голосов
/ 30 июля 2011

У меня есть сетка данных, содержащая три столбца, определенных в MXML.

Я также динамически добавляю некоторые столбцы в сетку данных в зависимости от полученных данных.

Первоначально я установил исходные столбцы в массив в событии инициализации приложения:

private var _origColumns:Array();

private function appInit() :void
{
  _origColumns = new Array();
  _origColumns = myDataGrid.columns;
}

И когда я вызываю функцию добавления столбцов, я хочу сначала восстановить сетку данных до ее исходного набора столбцов

private function addCols() :void
{
  var columnToAdd:Array = new Array();
  columnToAdd = _origColumns;

  // Add the new columns to the columnToAdd Array.
  //
  //

  myDataGrid.columns = columnToAdd;
}

Проблема, с которой я столкнулся, заключается в том, что при вызове функции addCols те столбцы, которые были добавлены, также остаются, хотя я пытаюсь вернуть обратно новый массив столбцов, который будет добавлен в массив _origColumns. По сути, я заканчиваю добавлением других столбцов, а также новых добавленных столбцов. Я хотел бы сначала вернуться к первым трем столбцам, а затем просто добавить столбцы, которые я хочу добавить.

Я проверил переменную _origColumns, и она, кажется, растет, когда столбцы уже добавлены в сетку данных, хотя я не переназначаю ее для значения столбцов сетки данных.

Я надеюсь, что кто-то сможет лучше понять, почему это происходит. Последние несколько часов я бился головой об это.

Я попытался добавить утилиту changewatcher в массив _origColumns, но, похоже, она изменяется, но событие наблюдения не отправляется.

Спасибо

1 Ответ

1 голос
/ 30 июля 2011

Это потому, что в вашей функции appInit вы перезаписали _origColumns тем же базовым объектом массива из сетки данных.Таким образом, всякий раз, когда столбец добавляется в сетку данных, по умолчанию он добавляется в ваш массив _origColumns.

private function appInit() :void
{
  _origColumns = new Array();

  _origColumns = myDataGrid.columns; // Offending line
  // both properties will reference the same underlying Array object
}

Быстрое решение состоит в том, чтобы сделать копию массива, вы можете сделать это с помощью Array.concat метод (я предполагаю, по крайней мере, Flex 3).Измените оскорбительную строку на:

_origColumns = myDataGrid.columns.concat(); // passing no arguments makes a shallow copy
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...