【问题标题】:Why does my AS3 DataGrid with sortable columns show wrong movieclip loaded in to cell after sorting?为什么我的带有可排序列的 AS3 DataGrid 在排序后显示错误的影片剪辑加载到单元格中?
【发布时间】:2012-08-23 23:54:17
【问题描述】:

我的 AS3 项目中有一个 datagrid 组件,并且有一个自定义单元格渲染器分配给一个列,该列根据单元格数据的值将影片剪辑加载到单元格中。例如,如果单元格数据是数字 1 我加载movieclip1,如果2 我加载movieclip2。这很好用。在 CustomCellRenderer 类中,我使用

 public function set data(value:Object):void {
   _data = value;
   // value.Number is the value that I use to determine which movie clip to show in this cell 
   source = "movie"+value.Number;
 }

当 DataGrid 加载时,正确的影片剪辑被加载到单元格中。但是,当用户通过单击列的标题对列进行排序时,某些影片剪辑不会加载。我检查了数据是否正常排序,当我追踪“movie”+value.Number 时,会显示正确的字符串。

我想也许我需要在再次设置源之前卸载每个单元格中的影片剪辑?我该怎么做?

我注意到的另一件事是,当 DataGrid 需要滚动时,因为屏幕上的行数超过了(呃!),那么一次只会显示一组影片剪辑,就好像有一个“活动”一样或“焦点”单元格,其中将显示唯一的影片剪辑。同样,我猜测 Flash 正在尝试仅显示可滚动 DataGrid 的可见部分中的影片剪辑,并在每次滚动时尝试刷新。然而,只有 1 个单元格显示影片剪辑,而不是所有可见部分(大约 8 行)。

谢谢

【问题讨论】:

  • 可能由于渲染机制的原因,设置的数据不会一直被调用。我建议您在排序完成后尝试调用 dg.invalidateList() 。或者(但这不是很好)将您的逻辑也移动到渲染器中的 updateDisplayList()。
  • 至少“updateDisplayList”这个东西会帮助你检查这是否只是一个渲染问题而不是一个逻辑/排序问题。出于性能原因,我不建议将此作为永久解决方案。你还在渲染器中覆盖“commitProperties”吗???
  • 您好,感谢您的回复,直到现在我才能看到这个。据我所知 - 不,我没有覆盖 commitProperties。我已经尝试过您的建议,即调用 dg.invalidateList() 来尝试刷新列表。我现在更关心当列表滚动而不是排序时电影剪辑消失的问题,因为我现在已经删除了排序功能。因此,作为快速检查,我定期调用 invalidateList() 并且可以确认每次都调用了 setData(),但是该列表仍然没有显示我希望在所有单元格中看到的所有影片剪辑...??跨度>
  • 由于您的“源”实际上设置正确,麻烦的代码应该是处理源分配的代码,我希望这是一个setter函数,否则源不应该自动更新任何东西。您介意分享源设置器代码吗?
  • 感谢您的回复.. 上面的代码是我创建的自定义 CellRenderer 类中的源设置器代码。分配的源是“movie”+value.number 部分,它是库中的一个影片剪辑 - 这将是 1,2 或 3,所以我的库中有这些影片剪辑符号(movie1、movie2、movie3) .我不确定您要我分享的代码以外的其他代码。公共函数集数据()代码是单元格渲染器中我从默认类更改的唯一代码。当我设置数据网格时,我使用 column.cellRenderer= MyCellRenderer;

标签: actionscript-3 datagrid cellrenderer flash-cs6


【解决方案1】:

它可能与数据网格单元虚拟化有关,因为它试图优化滚动性能并回收单元布局。尝试将虚拟布局设置为false,也许有帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-17
    • 2011-03-07
    • 1970-01-01
    相关资源
    最近更新 更多