Базовый класс для пользовательских компонентов

В моем гибком приложении у меня есть различные настраиваемые компоненты, созданные с помощью mxml или ActionScript. Я хочу, чтобы все они расширили базовый класс, где я могу определять свойства / прослушиватели событий и т. Д. Может ли кто-нибудь дать мне пример, как создать этот базовый класс и как я могу расширить его в компонентах mxml и actionscript?


person CodeQrius    schedule 09.12.2009    source источник


Ответы (3)


Создание базового класса:

ActionScript

В BaseClass.as:

public class BaseClass
{
}

Расширение базового класса:

ActionScript

public class SubClass extends BaseClass
{
}

MXML

В файле с именем SubClass.mxml:

<ns:BaseClass xmlns:ns="path.to.base.*">
</ns:BaseClass>
person Wesley Petrowski    schedule 09.12.2009
comment
Но в некоторые компоненты на основе ActionScript уже встроены гибкие компоненты. вот так: открытый класс MyButton extends Button {} Как мне сделать так, чтобы они расширяли новый BaseClass? - person CodeQrius; 09.12.2009
comment
Для этого потребуется множественное наследование, которое ActionScript официально не поддерживает. Есть способ получить что-то довольно близкое с помощью #include, но это довольно беспорядочно. См. darronschall.com/weblog/2006/10 / для получения более подробной информации. - person Wesley Petrowski; 09.12.2009

Возможно, вы могли бы написать общий интерфейс для своих компонентов, просто с методами, которые им нужны для реализации.

public interface ICustomComponent {

    function doSomething():void; 

    // more methods here

}

А затем в своих компонентах AS вы просто реализуете интерфейс ICustomComponent (или как вы его назвали)

public class CustomButton extends Button implements ICustomComponent {

    public function doSomething():void {

    }
}

Вы также можете сделать это в компонентах MXML:

<mx:Button xmlns:mx="http://www.adobe.com/2006/mxml"
    implements="ICustomComponent">

    <mx:Script>
        <![CDATA[

            public function doSomething():void {
                // blah blah
            }               

        ]]>      
    </mx:Script>

</mx:Button>

Просто идея. Надеюсь, это поможет. Ура

person just_a_dude    schedule 12.12.2009

В приведенном ниже примере компонент расширяет форму для создания адресной формы.

Вместо формы вы можете расширить свой собственный компонент.

При использовании ActionScript я бы посоветовал изучить жизненный цикл гибких компонентов для повышения производительности: http://livedocs.adobe.com/flex/3/html/help.html?content=ascomponents_advanced_2.html

mx: Форма xmlns: mx = "http://www.adobe.com/2006/mxml" xmlns: MyComp = "*"

<mx:FormItem label="NameField">
    <mx:TextInput/>
</mx:FormItem>

<mx:FormItem label="Street">
    <mx:TextInput/>
</mx:FormItem>

<mx:FormItem label="City" > 
    <mx:TextInput/>
</mx:FormItem>

<mx:FormItem label="State" > 
    <MyComp:StateComboBox/>
</mx:FormItem>

The following application file references the AddressForm component in the

Тег AddressForm:

mx: Приложение xmlns: mx = "http://www.adobe.com/2006/mxml"
xmlns: MyComp = "*"

<MyComp:AddressForm/> 

/ mx: Приложение

из http://livedocs.adobe.com/flex/3/html/help.html?content=mxmlcomponents_1.html

person Eran    schedule 09.12.2009
comment
Но в некоторые компоненты на основе ActionScript уже встроены гибкие компоненты. вот так: открытый класс MyButton extends Button {} Как мне сделать так, чтобы они расширяли новый BaseClass? - person CodeQrius; 09.12.2009
comment
Если вы ищете множественное вдыхание, как в java, ActionScript не поддерживает это. вы можете использовать несколько интерфейсов, которые могут помочь вам MyButton extends Button {} реализует ICustomButtons, IEventDispacher - person Eran; 09.12.2009