我知道许多人已经提出这类问题,但该帖子没有给我更多信息来了解Flex Framework中ItemRenderer和ItenEditor之间的实际区别。
据我所知,ItemRenderer主要用于显示视觉元素,而ItemEditor主要用于编辑目的。
所以我尝试了以下示例来找出其中的区别:
对于ItemRenderer,我使用了以下代码:
<mx:DataGrid dataProvider="{initDG}">
<mx:columns>
<mx:DataGridColumn headerText="Artist" dataField="Artist"/>
<mx:DataGridColumn headerText="Album" dataField="Album"/>
<mx:DataGridColumn headerText="Price" dataField="Price">
<mx:itemRenderer>
<fx:Component>
<mx:TextInput restrict="0-9" maxChars="10" />
</fx:Component>
</mx:itemRenderer>
</mx:DataGridColumn>
<mx:DataGridColumn headerText="Cover" dataField="Cover"/>
</mx:columns>
</mx:DataGrid>
我得到的结果如下:
价格字段显示为可编辑。
我再次使用ItemEditor尝试相同的代码,如下所示:
<mx:DataGrid dataProvider="{initDG}">
<mx:columns>
<mx:DataGridColumn headerText="Artist" dataField="Artist"/>
<mx:DataGridColumn headerText="Album" dataField="Album"/>
<mx:DataGridColumn headerText="Price" dataField="Price">
<mx:itemEditor>
<fx:Component>
<mx:TextInput restrict="0-9" maxChars="10" />
</fx:Component>
</mx:itemEditor>
</mx:DataGridColumn>
<mx:DataGridColumn headerText="Cover" dataField="Cover"/>
</mx:columns>
</mx:DataGrid>
我得到的结果如下:
但这里的价格字段是不可编辑的。
所以,由于我是这些控件的新手,我很困惑为什么会发生这种情况。使用ItemEditor作为该字段不可编辑的原因。
如果有人知道背后的原因是什么,请帮助我了解有关这两个控件的更多细节。
答案 0 :(得分:3)
ItemRenderer
和ItemEditor
之间的差异:
使用ItemRenderer时,可以更改组件的外观。在您的情况下,如果您有一个datagrid列,并将applyRenderer与您在列中的图像一起应用,则会显示图像。
如果您使用ItemEditor,则在尝试更改该列时,您将对组件的方面采取行动。如果您在列上将ItemEditor作为TextInput放置,当您单击列时将显示文本输入。
Flex具有ItemRenderer和ItemEditor的自动管理功能,默认情况下,渲染器是编辑器,因此当您想要在ItemRenderer上实现可用于编辑列的相同方面时。
如果您想单独使用这些功能,可以放置rendererIsEditor = false
,但必须实现两个功能。
我希望我的解释清楚。如果您有其他疑问,请告诉我
答案 1 :(得分:2)
在第一种情况下,由于您在渲染器中嵌入了可编辑字段,因此编辑以环形方式工作。单元格始终处于编辑模式,不使用DataGrid的内置编辑模式。
在第二种情况下,您的itemEditor未被Flex激活,因为DataGrid需要&quot; editable = true&#39;。如果将editable设置为true,则应在用户单击单元格时激活itemEditor。
还有第三种方法:使用&#39; editable = true&#39;对于DataGrid,保留itemRenderer,并设置&#39; rendererIsEditor&#39;在专栏上。
检查这里的例子; Adobe Flex doc