PDA

Просмотр полной версии : наследование mxml от as


40min
15.10.2010, 16:11
Есть базовый класс компонент:


package myControls
{
import mx.core.UIComponent;

public class BaseControl extends UIComponent
{
}
}


пытаюсь создать наследника на mxml


<?xml version="1.0" encoding="utf-8"?>
<myControls:BaseControl xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx">
<fx:Declarations></fx:Declarations>

<s:VGroup>
<!--- и т.д. -->
</s:VGroup>
</myControls:BaseControl>


получаю ругань на VGroup да и на вообще любой компонент внутри:

"Объявление "VGroup" должно содержаться в рамках тега <Declarations>, так как оно не реализует "mx.core.IUIComponent". "

Простите, но VGroup наследуется от по цепочке от UIComponent, который всё реализует.
Чего я не так делаю?

alatar
15.10.2010, 17:36
UIComponent не является контейнером (в понимании флекса). Либо наследуйтесь от SkinnableContainer, либо определить свойство по-умолчанию, куда будут добавляться детишки.

40min
15.10.2010, 19:30
ммм

добавил в базовом классе

public var container:SkinnableContainer = new SkinnableContainer ();

как её в дочке юзать?


<controls:BaseControl ... >
<controls:container>
<s:SkinnableContainer>
<s:Button label="ddd" width="100" height="100"/>
</s:SkinnableContainer>
</controls:container>
</controls:BaseControl>


кнопку не видно

alatar
15.10.2010, 20:24
Под наследованием от SkinnableContainer я имел ввиду это:
package myControls
{
public class BaseControl extends SkinnableContainer
{
}
}

Что-то я не пойму чего вы пытаетесь добиться, объясните подробнее. У вас явно пробел в понимании жизненного цикла компонентов и принципов их создания.

40min
15.10.2010, 20:29
Это я понял, но вы предложили "либо | либо".
Пытался реализовать второй вариант с композицией и добавил переменную класса SkinnableContainer.

Первый в-т мне не подходит, т.к. хочу, чтобы BaseControl extends UIComponent.

alatar
15.10.2010, 21:07
Какой смысл в 4-м СДК наследоваться именно от UIComponent? Если собираетесь продолжить свои изыскания, то:
1. В компоненте создается, например, массив, который помечается как defaultProperty:
[DefaultProperty("content")]
...
public var content:Array;

Переписываете метод createChildren и в нем добавляете содержимое массива в ваш компонент.

40min
15.10.2010, 21:16
Не совсем понимаю, что мне даст этот массив.
В компоненте? Вы подразумеваете базовый класс?

alatar
15.10.2010, 21:23
Да базовый.
Не совсем понимаю, что мне даст этот массив.
А куда по-вашему компилятор должен сложить все, что вы запихнули в mxml? Вы ему никак не сообщили.

40min
18.10.2010, 19:38
ага, вроде разобрался, спасибо

Astraport
18.10.2010, 21:18
ага, вроде разобрался, спасибо
Ну и что сделано? У меня тоже была подобная проблема, пришлось обходить стороной.

AntonSurkont
20.10.2010, 11:08
ага, вроде разобрался, спасибо
40min отпишись плиз что у тебя получилось, как тебе удалось реализовать наследование mxml от as, мне интересно

alatar
20.10.2010, 12:02
Что конкретно вам не понятно из предыдущих постов?