Концепция SkinPart во Flex 4 дает разработчику и дизайнеру много возможностей. Перечисление чего-либо как SkinPart означает, что вы можете поместить этот конкретный элемент в любое место вашего пользовательского компонента, используя файл скина. SkinParts — это просто другие компоненты, поэтому вы можете использовать встроенные функции, а также любые скины, которые могут иметь место, используя их. В SortableList я решил использовать базовую кнопку в качестве заголовка. Определение SkinPart очень просто, вот код для пользовательского компонента с определением SkinPart .
public class SortableList extends List
{
public function SortableList()
{
super();
}
[SkinPart(required="true")]
public var header:Button;
}
Все, что вам нужно сделать, это создать тег метаданных с SkinPart и обязательным атрибутом, установленным в true или false. Справа внизу укажите, каким должен быть идентификатор вашей части скина, а затем, какой это компонент.
Чтобы показать и использовать SkinPart, вам нужно добавить его в файл скина и убедиться, что тип компонента и идентификатор совпадают. В моем случае у меня естькомпонент с идентификатором заголовка.
<s:Button id="header" width="100" height="20" x="0" y="0" /><b><span color="black" style=""></span></b>
Предположительно, вы хотите, чтобы ваш новый SkinPart что-то делал, и именно здесь некоторые люди сталкиваются с проблемами, потому что сначала внутри конструктора SortableList люди пытаются добавить прослушиватель событий в компонент заголовка. Проблема в том, что когда вызывается конструктор, он не создает SkinPart . Это происходит во время отдельной операции. Секрет в том, чтобы переопределить функцию partAdded , которая является методом в классе SkinnableComponent , основой для каждого нового компонента spark.
Функция partAdded вызывается автоматически и добавляет все SkinParts, которые вы указали в своем пользовательском компоненте. Он принимает два параметра, partName и экземпляр . Обязательно вызовите super.partAdded, чтобы ваш SkinPart был добавлен в компонент, а затем вы можете использовать переменную экземпляра, чтобы проверить, когда создается ваш SkinPart . Это позволяет вам добавлять прослушиватели событий, которые будут срабатывать, когда пользователь взаимодействует с вашей частью скина. В этом случае я просто добавил простой обработчик кликов:
override protected function partAdded(partName:String, instance:Object):void
{
super.partAdded(partName, instance);
if( instance == header)
{
header.addEventListener(MouseEvent.CLICK,header_clickHandler);
}
}
Если есть только один скин , не кажется , нет никакой необходимости для если заявления , потому что она будет работать только один раз. У меня есть это там, чтобы быть в безопасности. Вам также необходимо добавить код, чтобы при удалении SkinPart вы также удаляли прослушиватель событий. Это делается путем переопределения функции partRemoved.
override protected function partRemoved(partName:String, instance:Object) : void
{
super.partRemoved(partName, instance);
if( instance == header )
{
header.removeEventListener(MouseEvent.CLICK, header_clickHandler);
}
}
И это почти все, что нужно сделать. Это просто базовая реализация, но она должна помочь вам начать. Гибкость дизайна / разработки, которую вы получаете, используя SkinParts в пользовательских компонентах, делает его отличной возможностью!