Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > Flex

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 01.06.2010, 17:30
Dimitry_II вне форума Посмотреть профиль Отправить личное сообщение для Dimitry_II Найти все сообщения от Dimitry_II
  № 1  
Ответить с цитированием
Dimitry_II

Регистрация: Jan 2010
Сообщений: 211
По умолчанию Байндинг пользовательского списка не получается

Есть коллекция объектов, отображаемая в таблице. Одно из свойств каждого объекта - также объект с набором свойств. В зависимости от выбора из коллекции объекта хочу, чтобы менялось отображение дочернего. Задание пустяковое, если бы не способ отображения: свойства дочернего объекта я хочу расположить в списке.

Ход мыслей был таков:
основная таблица с коллекцией объектов:
Код:
<mx:DataGrid id="grid" dataProvider="{some_collection}"/>
отображаемый список свойств дочернего объекта:
Код:
<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, время: 21:39.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 21:39.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.