1

我知道很多人已经问过这类问题,但那篇文章并没有给我更多信息来了解 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 作为该字段不可编辑的原因之后。

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

4

2 回答 2

3

ItemRenderer和之间的区别ItemEditor

当您使用 ItemRenderer 时,您会更改组件的方面。在您的情况下,如果您有一个 datagrid 列,并使用您在列中显示的图像应用和 itemRenderer。

如果您使用 ItemEditor,当您尝试更改该列时,您将在组件的方面进行操作。如果您在您的列上放置一个 ItemEditor 作为 TextInput,当您单击您的列时,将显示一个文本输入。

Flex 具有 ItemRenderer 和 ItemEditor 的自动管理,默认情况下您的渲染器是编辑器,因此当您只想实现 ItemRenderer 时,您可以使用相同的方面来编辑您的列。

如果您想将这些功能分开,您可以放置rendererIsEditor = false​​,但您必须实现两个功能。

我希望我的解释清楚。如果您还有其他疑问,请告诉我

于 2017-12-06T13:50:24.540 回答
2

在第一种情况下,编辑以一种迂回的方式工作,因为您在渲染器中嵌入了一个可编辑字段。单元格始终处于编辑模式,不使用 DataGrid 的内置编辑模式。

在第二种情况下,您的 itemEditor 没有被 Flex 激活,因为 DataGrid 需要“editable=true”。如果将 editable 设置为 true,则当用户单击单元格时应该激活 itemEditor。

还有第三种方法:对DataGrid 使用'editable=true',保留itemRenderer,并在Column 上设置'rendererIsEditor'。

检查这里的例子;Adobe Flex 文档

于 2017-12-05T13:34:24.153 回答