【问题标题】:Flex Restore Datagrid to Original Columns Defined in MXMLFlex 将 Datagrid 还原到 MXML 中定义的原始列
【发布时间】:2011-07-29 21:39:40
【问题描述】:

我有一个数据网格,包含在 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 变量,当列已添加到数据网格时,它似乎正在增长,尽管我没有将它重新分配给数据网格列的值。

我希望有人可以提供更多关于为什么会发生这种情况的见解。在过去的几个小时里一直在敲我的头。

我尝试向数组 _origColumns 添加一个 changewatcher 实用程序,但它似乎正在更改,但 watch 事件没有调度。

谢谢,

【问题讨论】:

  • 您能否在 // 将新列添加到 columnToAdd 数组部分中发布那些代码,因为它们可能是发生这种情况的原因。

标签: arrays apache-flex datagrid


【解决方案1】:

这是因为在您的 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

【讨论】:

    猜你喜欢
    • 2021-10-03
    • 2012-01-30
    • 2011-03-19
    • 1970-01-01
    • 2011-01-31
    • 1970-01-01
    • 1970-01-01
    • 2013-12-17
    • 1970-01-01
    相关资源
    最近更新 更多