Статьи

SkinPart в Flex 4

Концепция 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 в пользовательских компонентах, делает его отличной возможностью!