PDA

Просмотр полной версии : как получить доступ к элементам skinnableDataContainer?


Фломастер
28.08.2010, 15:40
Мне нужно получить сгенерированные элементы skinnableDataContainer, как это можно сделать?

у меня переопределён itemRenderer и мне нужно получить доступ к текущим свойствам каждого переопределённого элемента контейнера

alatar
29.08.2010, 11:10
Уточните, что именно нужно? Конкретно что вы хотите сделать?

Фломастер
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

alatar
29.08.2010, 18:40
Ну можно в принципе так:
friendsContainer.dataGroup.getElementAt(0)
Но, по-моему, у вас в корне неверный подход. State определяется данными, вот с данными и работайте.

Фломастер
29.08.2010, 18:46
дело в том, что friendsContainer.dataGroup.getElementAt(0) возвращает IVisualElement, и нет там свойств, которые я создавал в SelectableUserMiniCard

через данные вы предалагаете работать с помощью двустороннего связывания?

udaaff
29.08.2010, 18:50
friendsContainer.dataGroup.getElementAt(0) as SelectableUserMiniCard ?

alatar
29.08.2010, 18:50
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

alatar
29.08.2010, 19:06
Это я уже понял, скажите для чего и от чего зависит 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

alatar
29.08.2010, 19:17
Добавьте в данные поле state, при клике меняйте его, после чего достаточно будет проверить данные.

friendsContainer.dataGroup.getElementAt(0) всегда возвращает InviteFriendsPopupInnerClass0
Когда я поставил "0", я имел ввиду, что необходимо перебрать элементы в цикле.

Фломастер
29.08.2010, 19:26
да, именно в цикле

Добавлено через 1 минуту
для данных нужно будет двустороннее связывание?

alatar
29.08.2010, 19:37
для данных нужно будет двустороннее связывание?
Не обязательно (я бы даже сказал, что этого следует избегать), зависит от того как сделаете.


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 менять его?

alatar
29.08.2010, 21:52
Добавить надо в то, что в data.

Фломастер
30.08.2010, 01:15
да, измени логику на работу с данными - решило все проблемы