![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Регистрация: Jan 2010
Сообщений: 211
|
Есть коллекция объектов, отображаемая в таблице. Одно из свойств каждого объекта - также объект с набором свойств. В зависимости от выбора из коллекции объекта хочу, чтобы менялось отображение дочернего. Задание пустяковое, если бы не способ отображения: свойства дочернего объекта я хочу расположить в списке.
Ход мыслей был таков: основная таблица с коллекцией объектов: отображаемый список свойств дочернего объекта: <mx:List labelFunction="listLabelFunction">
<mx:Object label="Property 1:" data="{grid.selectedItem.sl_object.prop1}"/>
<mx:Object label="Property 2:" data="{grid.selectedItem.sl_object.prop2}"/>
</mx:List>
<mx:Script>
private function listLabelFunction(item:Object):String {
return item.label + " " + item.data;
}
</mx:Script>
В принципе, я понимаю, что пытаюсь менять провайдер провайдера, что, видимо, неправильно по определению. Могу сделать реакцию на изменение выбранного объекта в коллекции и менять вручную соответствующие элементы коллекции, которую и забайндить на List. Но мне кажется, что это неправильно. Возможно, я пошел неправильно в желании именно так отобразить поля объекта (нужен другой элемент), может, неправильно что-то делаю. Но мне кажется, что можно автоматизировать этот процесс. Задача вроде не очень сложная, но слету решить не получается. Добавлено через 28 часов 32 минуты Всему свое время. Лучше разобрался в байндинге, эдиторах и рендерах и все стало ясным и понятным. Если совсем по-простецки, то рендерер такой, а с эдитором надо повозиться: <mx:List dataProvider="{grid.selectedItem.sl_object}">
<mx:itemRenderer>
<fx:Component>
<mx:VBox paddingTop="0">
<mx:Label text="{'Property 1: ' + data.prop1}"/>
<mx:Label text="{'Property 2: ' + data.prop2}"/>
</mx:VBox>
</fx:Component>
</mx:itemRenderer>
</mx:List>
[Bindable]
public var myobj:ArrayCollection = new ArrayCollection([{title:"Property1:", advalue:""}, {title:"Property 2:", advalue:""}]);
//реакция основной таблицы на изменение положения
protected function gridChangeHandler(event:ListEvent):void {
var isSelected:Boolean = grid.selectedIndex != -1;
myobj[0].advalue = isSelected ? grid.selectedItem.sl_object.prop1 : "";
myobj[1].advalue = isSelected ? grid.selectedItem.sl_object.prop2 : "";
myobj.dispatchEvent(new CollectionEvent(CollectionEvent.COLLECTION_CHANGE));
}
<mx:DataGrid headerHeight="0" dataProvider="{myobj}">
<mx:columns>
<mx:DataGridColumn dataField="title" width="100" textAlign="right"/>
<mx:DataGridColumn dataField="advalue"/>
</mx:columns>
</mx:DataGrid>
Последний раз редактировалось Dimitry_II; 02.06.2010 в 22:04. |
![]() |
![]() |
Часовой пояс GMT +4, время: 22:53. |
|
|
« Предыдущая тема | Следующая тема » |
|
|