В моем приложении flex у меня есть различные пользовательские компоненты, выполненные с помощью mxml или actionscript. Я хочу, чтобы все они расширили базовый класс, где я могу определить свойства/прослушиватели событий и т. Д. Может ли кто-нибудь дать мне пример того, как создать этот базовый класс и как я могу расширить его в компонентах mxml и actionscript?Базовый класс для пользовательских компонентов
ответ
Создание базового класса:
ActionScript
В BaseClass.as:
public class BaseClass
{
}
Расширение базового класса:
ActionScript
public class SubClass extends BaseClass
{
}
MXML
В файле подкласс SubClass.MXML:
<ns:BaseClass xmlns:ns="path.to.base.*">
</ns:BaseClass>
В приведенном ниже примере компонент расширяет форму для создания адресной формы.
Вместо формы вы можете расширить свой собственный компонент.
При использовании 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
Но некоторые компоненты на основе ActionScript уже встроены в гибкие компоненты. например: public class MyButton extends Button { } Как я могу расширить эти возможности для нового BaseClass? – CodeQrius
Если вы ищете несколько ингаляций, например, в java, ActionScript не поддерживает его. вы можете использовать mutiple inerfaces, которые могут вам помочь MyButton extends Button {} реализует ICustomButtons, IEventDispacher – Eran
Может быть, вы могли бы написать общий интерфейс для компонентов, только с методами, необходимыми для реализации
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
Но некоторые компоненты на основе ActionScript уже встроены в гибкие компоненты. например: public class MyButton extends Button { } Как я могу расширить эти возможности для нового BaseClass? – CodeQrius
Это потребует множественного наследования, которое ActionScript официально не поддерживает. Есть способ получить что-то, что довольно близко, используя #include, но это довольно грязно. Подробнее см. Http://www.darronschall.com/weblog/2006/10/multiple-inheritance-in-actionscript-3.cfm. –