我知道很多人已经问过这类问题,但那篇文章并没有给予我更多的信息来理解Flex框架中ItemRenderer和ItemEditor之间的实际差异。
据我所知,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作为为什么该字段是不可编辑的。
如果有人知道这背后的原因是什么,请帮助我了解更多关于这两个控制的细节。
2条答案
按热度按时间niknxzdl1#
ItemRenderer
和ItemEditor
之间的差异:当你使用ItemRenderer时,你改变了你的组件的外观。在你的例子中,如果你有一个datagrid列,并应用itemRenderer和一个图像,你在你的列中有一个图像显示。
如果您使用ItemEditor,则在尝试更改该列时,将对组件的外观进行操作。如果您将ItemEditor作为TextInput放在列上,则在单击列时将显示文本输入。
Flex具有ItemRenderer和ItemEditor的自动管理,默认情况下,渲染器是编辑器,因此当您只想实现ItemRenderer时,可以使用相同的方面来编辑您的列。
如果你想把这些特性分开,你可以放
rendererIsEditor = false
,但是你必须实现两个功能。我希望我的解释清楚了。如果你还有其他疑问,请告诉我
lg40wkob2#
在第一种情况下,编辑以迂回的方式工作,因为您在呈现器中嵌入了一个可编辑字段。单元格始终处于编辑模式,并且不使用DataGrid的内置编辑模式。
在第二种情况下,您的itemEditor不会被Flex激活,因为DataGrid要求“editable= true”。如果将editable设置为true,则当用户单击单元格时,您的itemEditor应被激活。
还有第三种方法:对数据网格使用“editable=true”,保留itemRenderer,并在列上设置“rendererIsEditor”。
查看此处的示例; Adobe Flex文件