#apache-flex #itemrenderer #skin #arraycollection
#apache-flex #itemrenderer #Кожа #arraycollection
Вопрос:
Цель: Я хотел бы передать скины в ItemRenderer (который является кнопкой) списка и иметь возможность скинуть каждую кнопку в этом списке.
Это то, что у меня есть:
Список:
<s:List itemRenderer="renderers.ItemRenderer" dataProvider="{collectionWorkspace}" />
ArrayCollection:
<s:ArrayCollection id="collectionWorkspace">
<comp:Layout1 />
<comp:Layout2 />
<comp:Layout3 />
<comp:Layout4 />
<comp:Layout5 />
</s:ArrayCollection>
Макеты представляют собой классы обложек с кнопкой HostComponent.
ItemRenderer:
<?xml version="1.0" encoding="utf-8"?>
<s:ItemRenderer xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:mx="library://ns.adobe.com/flex/halo"
xmlns:s="library://ns.adobe.com/flex/spark">
<s:states>
<s:State name="normal" />
</s:states>
<s:Button skinClass="{data}"/>
</s:ItemRenderer>
Я получаю ошибку (исправлено для уточнения):
Ошибка: скин для приложения….Не удается найти Button1.
Ответ №1:
Вы передаете skinClass
свойству экземпляр класса оболочки, а не фактический класс (который необходим кнопке для создания собственного экземпляра класса оболочки).
Если вы можете, лучше всего было бы сделать collectionWorkspace
массив объектов класса, а не экземпляров.
<s:ArrayCollection id="collectionWorkspace">
<fx:Class>yourPkg.Layout1</fx:Class>
<fx:Class>yourPkg.Layout2</fx:Class>
<fx:Class>yourPkg.Layout3</fx:Class>
<fx:Class>yourPkg.Layout4</fx:Class>
<fx:Class>yourPkg.Layout5</fx:Class>
</s:ArrayCollection>
Если вы не можете этого сделать, вы должны быть в состоянии извлечь класс экземпляра и передать его skinClass
.
<s:Button skinClass="{Object(data).constructor}"/>
Редактировать:
Привязка по умолчанию не будет работать, потому что data
начинается как null
до того, как она будет инициализирована классом. Если вы предоставите это null
, вы получите исключение. Чтобы исправить это, вам нужно будет вернуть значение по умолчанию для времени между null
и значением:
<s:Button skinClass="{data != null ? data as Class : spark.skins.spark.ButtonSkin}"/>
Я пытался сделать это с ArrayCollection
использованием некоторых оболочек кнопок. Это сработало.
Комментарии:
1. Отредактированное значение skinClass кнопки сработало для меня хорошо! Спасибо, Брайан. Я надеюсь, что другие также найдут в этом ценность.