2009-12-09 7 views
0

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

ответ

0

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

ActionScript

В BaseClass.as:

public class BaseClass 
{ 
} 

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

ActionScript

public class SubClass extends BaseClass 
{ 
} 

MXML

В файле подкласс SubClass.MXML:

<ns:BaseClass xmlns:ns="path.to.base.*"> 
</ns:BaseClass> 
+0

Но некоторые компоненты на основе ActionScript уже встроены в гибкие компоненты. например: public class MyButton extends Button { } Как я могу расширить эти возможности для нового BaseClass? – CodeQrius

+0

Это потребует множественного наследования, которое ActionScript официально не поддерживает. Есть способ получить что-то, что довольно близко, используя #include, но это довольно грязно. Подробнее см. Http://www.darronschall.com/weblog/2006/10/multiple-inheritance-in-actionscript-3.cfm. –

0

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

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

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

тх: Форма XMLNS: Мх = "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> 

следующий файл приложения ссылается на компонент AddressForm в

AddressForm тег:

ое: XMLNS Применения: тй = "http://www.adobe.com/2006/mxml"
XMLNS: MYCOMP = "*"

<MyComp:AddressForm/> 

/ое: Применение

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

+0

Но некоторые компоненты на основе ActionScript уже встроены в гибкие компоненты. например: public class MyButton extends Button { } Как я могу расширить эти возможности для нового BaseClass? – CodeQrius

+0

Если вы ищете несколько ингаляций, например, в java, ActionScript не поддерживает его. вы можете использовать mutiple inerfaces, которые могут вам помочь MyButton extends Button {} реализует ICustomButtons, IEventDispacher – Eran

1

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

public interface ICustomComponent { 

    function doSomething():void; 

    // more methods here 

} 

, а затем в ваших компонентах, как вы просто реализовать интерфейс 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> 

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