Чем ItemRenderer отличается от ItemEditor во Flex 4?

Я знаю этот тип вопросов, уже задаваемых многими людьми, но этот пост не дал мне больше информации для понимания относительно различий между ItemRenderer и ItenEditor во Flex Framework.

Насколько я знаю, 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>

И я получил результат следующим образом:

Но здесь поле Price недоступно для редактирования.

Так как я новичок в этих элементах управления, я запутался, почему это происходит. После использования ItemEditor почему это поле недоступно для редактирования.

Если кто-то знает, что является причиной этого, пожалуйста, помогите мне понять больше деталей относительно этих двух элементов управления.

2 ответа

Разница между ItemRenderer а также ItemEditor:

Когда вы используете ItemRenderer, вы меняете аспект вашего компонента. В вашем случае, если у вас есть столбец таблицы данных, и примените и itemRenderer с изображением, которое у вас есть в вашем столбце, показанное изображение

Если вы используете ItemEditor, вы воздействуете на аспект вашего компонента, когда пытаетесь изменить этот столбец. Если вы поместите ItemEditor в свой столбец как TextInput, то при нажатии на ваш столбец будет отображаться ввод текста.

Flex имеет автоматическое управление ItemRenderer и ItemEditor, по умолчанию у вас есть средство рендеринга - редактор, поэтому, когда вы хотите реализовать ItemRenderer только тот же аспект, который вы можете использовать для редактирования вашего столбца.

Если вы хотите разделить эти функции, вы можете поставить rendererIsEditor = false но вы должны реализовать две функции.

Я надеюсь, что мое объяснение понятно. Скажите, если у вас есть другие сомнения

В первом случае редактирование работает окольным путем, так как вы встроили редактируемое поле в средство визуализации. Ячейка всегда находится в режиме редактирования и не использует встроенный режим редактирования DataGrid.

Во втором случае ваш itemEditor не активируется Flex, потому что DataGrid требует 'editable = true'. Если вы установите для editable значение true, ваш itemEditor должен быть активирован, когда пользователь нажимает на ячейку.

Существует третий подход: используйте "editable = true" для DataGrid, сохраните itemRenderer и установите "RendererIsEditor" в столбце.

Проверьте примеры здесь; Adobe Flex doc

Другие вопросы по тегам