Просмотр полной версии : как получить доступ к элементам skinnableDataContainer?
Фломастер
28.08.2010, 15:40
Мне нужно получить сгенерированные элементы skinnableDataContainer, как это можно сделать?
у меня переопределён itemRenderer и мне нужно получить доступ к текущим свойствам каждого переопределённого элемента контейнера
Уточните, что именно нужно? Конкретно что вы хотите сделать?
Фломастер
29.08.2010, 18:21
вот таким образом я генерирую список из моих объектов:<s:SkinnableDataContainer id="friendsContainer"
dataProvider="{new ArrayCollection(profiles)}"
skinClass="skins.FriendsListSkin" height="310" width="550">
<s:itemRenderer>
<fx:Component>
<s:ItemRenderer>
<friends:SelectableUserMiniCard userVO="{data}" height="100%"/>
</s:ItemRenderer>
</fx:Component>
</s:itemRenderer>
</s:SkinnableDataContainer>
где SelectableUserMiniCard - переопределённый мной itemRenderer
мне нужно получить свойство currentState каждого сгенерированного экземпляра SelectableUserMiniCard
Ну можно в принципе так:
friendsContainer.dataGroup.getElementAt(0)
Но, по-моему, у вас в корне неверный подход. State определяется данными, вот с данными и работайте.
Фломастер
29.08.2010, 18:46
дело в том, что friendsContainer.dataGroup.getElementAt(0) возвращает IVisualElement, и нет там свойств, которые я создавал в SelectableUserMiniCard
через данные вы предалагаете работать с помощью двустороннего связывания?
friendsContainer.dataGroup.getElementAt(0) as SelectableUserMiniCard ?
SelectableUserMiniCard(friendsContainer.dataGroup.getElementAt(0))
friendsContainer.dataGroup.getElementAt(0) as SelectableUserMiniCard
через данные вы предалагаете работать с помощью двустороннего связывания?
Объясните поподробнее чего вы конкретно хотите добиться, получив доступ к currentState?
Фломастер
29.08.2010, 19:02
SelectableUserMiniCard(friendsContainer.dataGroup.getElementAt(0))
я делал так, выдаёт:
TypeError: Error #1034: Ошибка типа Coercion: невозможно преобразовать InviteFriendsPopupInnerClass0@106e2851 в friends.SelectableUserMiniCard.
мне нужно пробежаться по элементам и сохранить те экземляры SelectableUserMiniCard, у которых изменилось currentState
Это я уже понял, скажите для чего и от чего зависит currentState.
Добавлено через 2 минуты
По-поводу ошибки. Сначала проверьте, что это именно тот элемент который вам нужен.
if (friendsContainer.dataGroup.getElementAt(0) is SelectableUserMiniCard) {}
Фломастер
29.08.2010, 19:13
внутри SelectableUserMiniCard такие состяния, зависят от клика
<s:states>
<s:State name="unchecked"/>
<s:State name="checked"/>
</s:states>
friendsContainer.dataGroup.getElementAt(0) всегда возвращает InviteFriendsPopupInnerClass0
Добавьте в данные поле state, при клике меняйте его, после чего достаточно будет проверить данные.
friendsContainer.dataGroup.getElementAt(0) всегда возвращает InviteFriendsPopupInnerClass0
Когда я поставил "0", я имел ввиду, что необходимо перебрать элементы в цикле.
Фломастер
29.08.2010, 19:26
да, именно в цикле
Добавлено через 1 минуту
для данных нужно будет двустороннее связывание?
для данных нужно будет двустороннее связывание?
Не обязательно (я бы даже сказал, что этого следует избегать), зависит от того как сделаете.
friendsContainer.dataGroup.getElementAt(0) всегда возвращает InviteFriendsPopupInnerClass0
Да действительно, так не получится, из-за того что вы оборачиваете компонент:
<fx:Component>
<s:ItemRenderer>
<friends:SelectableUserMiniCard userVO="{data}" height="100%"/>
</s:ItemRenderer>
</fx:Component>
Это сработает если SelectableUserMiniCard будет наследоваться от ItemRenderer (или реализовывать IItemRenderer), тогда можно будет просто написать:
<s:SkinnableDataContainer id="friendsContainer"
dataProvider="{new ArrayCollection(profiles)}"
skinClass="skins.FriendsListSkin" height="310" width="550"
itemRenderer="friends.SelectableUserMiniCard">
</s:SkinnableDataContainer>
Фломастер
29.08.2010, 20:07
<friends:SelectableUserMiniCard userVO="{data}" height="100%"/>
я правильно понимаю, мне нужно в userVO добавить свойство state и изнутри SelectableUserMiniCard менять его?
Добавить надо в то, что в data.
Фломастер
30.08.2010, 01:15
да, измени логику на работу с данными - решило все проблемы
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.