Flex ItemRenderer作为`data`的字段?

时间:2009-05-27 18:26:02

标签: flex itemrenderer

我想让提供给DataGrid的数据决定它应该如何最佳呈现(也就是说,让数据携带一个将进行渲染的对象)。

例如,通过创建一个“Renderable”界面,该界面具有“渲染器:IFactory”属性,然后使用如下:

<mx:DataGrid x="0" y="0" width="100%" dataProvider="{myDataProvider}">
    <mx:columns>
    <mx:DataGridColumn headerText="Task" width="100"
        itemRenderer="{(data as Renderable).renderer}"/>
    </mx:columns>
</mx:DataGrid>

但要做到这一点,Renderable必须扩展IEventDispatcher,这似乎有点......

我也尝试过使用:

itemRenderer="{(data as Renderable).getRenderer()}"

哪个什么都不做(事实上,getRenderer方法永远不会被调用)。

有更好的方法吗?我做了一些根本错误的事情吗?

谢谢!

2 个答案:

答案 0 :(得分:2)

我可能错了,但我认为您在上面的代码示例中引用的“data”属性是视图中顶级Container的“数据”,而不是DataGrid的特定行。我想到了其他一些方法:

  1. 实现单个项目渲染器类,该类检查传递给它的数据,并使用适当的项目渲染器来提供所提供的数据类型。
  2. 在DataGrid视图中实现一个函数,该函数检查dataProvider并返回正确的项呈示器类;使用绑定表达式在DataGridColumn.itemRenderer属性中调用它。
  3. 实现DataGridColumn的子类,其中包含逻辑,以设置正确的itemRenderer。
  4. 我实际上建议不要将特定于视图的“渲染器数据”与模型中的数据混合。除非您使用与渲染器一起公开它的对象包装核心模型数据(有些人称之为ViewModel)。

答案 1 :(得分:0)

使getRenderer成为[Bindable]属性