ItemRenderer与Flex 4中的ItemEditor有何不同?

时间:2017-12-05 11:46:24

标签: actionscript-3 flex flex4 itemrenderer itemeditor

我知道许多人已经提出这类问题,但该帖子没有给我更多信息来了解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>

我得到的结果如下:

enter image description here

价格字段显示为可编辑。

我再次使用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>

我得到的结果如下:

enter image description here

但这里的价格字段是不可编辑的。

所以,由于我是这些控件的新手,我很困惑为什么会发生这种情况。使用ItemEditor作为该字段不可编辑的原因。

如果有人知道背后的原因是什么,请帮助我了解有关这两个控件的更多细节。

2 个答案:

答案 0 :(得分:3)

ItemRendererItemEditor之间的差异:

使用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