Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   Flex (http://www.flasher.ru/forum/forumdisplay.php?f=84)
-   -   наследование mxml от as (http://www.flasher.ru/forum/showthread.php?t=145660)

40min 15.10.2010 16:11

наследование mxml от as
 
Есть базовый класс компонент:

Код AS3:

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

ммм

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

Код AS3:

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 я имел ввиду это:
Код AS3:

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:
Код AS3:

[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

Цитата:

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


Часовой пояс GMT +4, время: 13:40.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.