Чем 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