Доступ к свойствам компонента из расширения компонента - PullRequest
1 голос
/ 29 июля 2011

У меня есть компонент с объявленной общедоступной переменной

[Bindable]
public var mnuSource:String;

Когда я расширяю этот компонент, я могу ссылаться на mnuSource (он компилируется), но среда выполнения жалуется, что свойство недоступно (ошибка 1056).

Как изменить / объявить свойства компонента, чтобы они фактически были доступны другим компонентам?

Спасибо

Ответы [ 2 ]

0 голосов
/ 29 июля 2011

То же, что и The_asMan, но в MXML

Приложение

<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
               xmlns:s="library://ns.adobe.com/flex/spark" xmlns:local="*" 
               >
    <local:SomeExtendedComponent />
</s:Application>

Некоторый базовый компонент

<?xml version="1.0" encoding="utf-8"?>
<s:Group 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:Script>
        <![CDATA[
            [Bindable]
            public var mnuSource:String;
        ]]>
    </fx:Script>
    <fx:Declarations>
        <!-- Place non-visual elements (e.g., services, value objects) here -->
    </fx:Declarations>
</s:Group>

Расширенный компонент

<?xml version="1.0" encoding="utf-8"?>
<local:SomeBaseComponent xmlns:fx="http://ns.adobe.com/mxml/2009" 
                         xmlns:s="library://ns.adobe.com/flex/spark" 
                         xmlns:mx="library://ns.adobe.com/flex/mx" xmlns:local="*"
                         creationComplete="cc(event)">
    <fx:Script>
        <![CDATA[
            import mx.controls.Alert;
            import mx.events.FlexEvent;

            protected function cc(event:FlexEvent):void
            {
                mnuSource = "Hi there!";
                Alert.show(mnuSource);
            }

        ]]>
    </fx:Script>
    <fx:Declarations>
        <!-- Place non-visual elements (e.g., services, value objects) here -->
    </fx:Declarations>
    <s:Label text="{mnuSource}" />
</local:SomeBaseComponent>
0 голосов
/ 29 июля 2011

Это непроверенный код, но он должен работать и дать вам хорошее представление о том, как расширить класс.

MyBaseClass.as
package{
  public class MyBaseClass{
    public var someVar:String;
    public function MyBaseClass( )::void{
      this.someVar = 'set from MyBaseClass';
    }
  }
}


MyBaseclassExtended.as
package{
  public class MyBaseclassExtended extends MyBaseClass{
    public MyBaseclassExtended( ){
      this.someVar = 'Set from MyBaseclassExtended';
    }
  }
}


call it like so
var asdf:MyBaseclassExtended = new MyBaseclassExtended();
trace( asdf.someVar ) // Set from MyBaseclassExtended
...