Гибкая переменная доступа из одного компонента в другой - PullRequest
0 голосов
/ 19 июля 2010

У меня есть основное приложение, в котором объявлена ​​переменная int.Я хочу получить доступ к этой переменной в другом компоненте, который присутствует в другом пакете.Как я могу это сделать?

Main.mxml (пакет по умолчанию)

<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
                       xmlns:s="library://ns.adobe.com/flex/spark" 
                       xmlns:mx="library://ns.adobe.com/flex/mx"
                               preinitialize = "foo()">
    <fx:Script>
            <![CDATA[
                         public var value1:int;
                         public function foo():void {
                            value1 = 5;
                         }

                ]]>
        </fx:Script>

    <\s:Application>

Comp.mxml (пакет компонентов)

<?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"
                 creationcomplete = "foo2()">
           <fx:Script>
                <![CDATA[
                            public function foo2(): void{
                             //------> access value1 from Main.mxml here.
                            }

                    ]]>
            </fx:Script>

</s:Group>

Ответы [ 4 ]

2 голосов
/ 19 июля 2010

Поскольку необходимая переменная находится в основном классе приложения, вы можете использовать свойство parentApplication для доступа к нему.

Main(this.parentApplication).value;
//or
Main(Application.application).value;

В общем случае правильный способ сделать этопередать ссылку на исходный объект (в данном случае, приложение) на объект вызывающей стороны - или передать само значение через некоторое открытое свойство.Предполагая, что Comp, о котором идет речь, присутствует в самом основном приложении, вы можете сделать:

<!-- Main.mxml : make value1 [Bindable] if you need the updates to be 
    reflected automatically  -->

<custom:Comp val="{this.value1}"/>

<!-- Comp.mxml : declare val as a public variable/property -->
<fx:Script>
    <![CDATA[
      public var val:int;
    ]]>
</fx:Script>
0 голосов
/ 19 июля 2010

Как насчет пользовательских событий.

http://livedocs.adobe.com/flex/3/html/help.html?content=createevents_3.html

Когда вы создаете свое пользовательское событие, вы можете получить доступ к переменной через приложение.

В противном случае перейдите на

mx.core.Application.application для доступа к основному приложению

0 голосов
/ 19 июля 2010

Ваше главное приложение должно иметь ссылку на компонент, для которого необходимо значение int. И значение должно быть установлено из вашего основного приложения. Если значение должно быть установлено в ответ на событие в компоненте, компонент может инициировать и отправлять событие, а главное приложение может иметь прослушиватель событий, а затем передать требуемый int.

Вы также можете привязать значения в ActionScript основных приложений: BindingUtils.bindProperty (this, «i», this.component, «i»), но предыдущий метод - лучший способ.

0 голосов
/ 19 июля 2010

У вас должно быть какое-то перенаправление, например, указание компоненту, где искать, например:

<fx:Script>
  <![CDATA[
    [Bindable] public var myapp:Application = null;
    public function get value1():int 
    { 
      return ( myapp == null ? 0 : myapp.value1 ); 
    }
    public function foo2():void 
    {
      var i:int = this.value1;
    }
  ]]>
</fx:Script>

А в приложении:

<package:Comp myapp="this" />

В противном случае вы можете создатькакой-то синглтон - статическая переменная для всего класса.Но это довольно грязно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...