Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   Flex (http://www.flasher.ru/forum/forumdisplay.php?f=84)
-   -   Есть или нет глобальные переменные во FLEX? (http://www.flasher.ru/forum/showthread.php?t=130307)

lighto 23.09.2009 10:01

Есть или нет глобальные переменные во FLEX?
 
Как мне перекинуть значение переменной из 1 Mxml файла в другой ???? есть ли вообще такое во флексе???Заранее спасибо. Да и если есть напишите как иль ссыль кинте. спасибо.:)

Night_rainbow 23.09.2009 11:10

Например, вот так:
MyCombobox.mxml:
Код AS3:

<?xml version="1.0" ?>
<mx:VBox xmlns:mx="http://www.adobe.com/2006/mxml">
    <mx:Script><![CDATA[
    public static final var value:Number=1;
        ]]></mx:Script>
    <mx:ComboBox>
        <mx:ArrayCollection>
            <mx:String>Dog</mx:String>
            <mx:String>Cat</mx:String>
        </mx:ArrayCollection>
    </mx:ComboBox>
</mx:VBox>


Потом в любом месте приложения:
Код AS3:

<mx:Script><![CDATA[
private function doSmth():void{
...
var n:Number = MyCombobox.value;
}
]]></mx:Script>


wvxvw 23.09.2009 11:16

Во-первых, как правило, глобальные переменные не нужны. Бывают нужны глобальные константы. Это значит, что если вам нужно получить значение свойства какого-то объекта, так и обратитесь к этому объекту.
Во-вторых, нет, в AS3 вообще нет глобальных переменных.

lighto 23.09.2009 11:43

Цитата:

Сообщение от Night_rainbow (Сообщение 852811)
Например, вот так:
MyCombobox.mxml:
Код AS3:

<?xml version="1.0" ?>
<mx:VBox xmlns:mx="http://www.adobe.com/2006/mxml">
    <mx:Script><![CDATA[
    public static final var value:Number=1;
        ]]></mx:Script>
    <mx:ComboBox>
        <mx:ArrayCollection>
            <mx:String>Dog</mx:String>
            <mx:String>Cat</mx:String>
        </mx:ArrayCollection>
    </mx:ComboBox>
</mx:VBox>


Потом в любом месте приложения:
Код AS3:

<mx:Script><![CDATA[
private function doSmth():void{
...
var n:Number = MyCombobox.value;
}
]]></mx:Script>


Не получается так пишет ошибку такого содержания Только атрибут "final" может использоваться в методе, который определен в классе.

Night_rainbow 23.09.2009 12:25

Да, точно, прощу прощения. С явой перепутал. :) Там и поля класса могут быть final. Просто уберите final и все....

P.S. Кстати говоря, а почему в actionScript убрали возможность выставления атрибута final на поле класса? Очень удобно ведь - помечать те переменные, которые нельзя изменять...

wvxvw 23.09.2009 14:48

А как это у вас сочитается переменная и конечная / постоянная? Переменная - значит, можно изменять, конечная - значит изменять нельзя. Переменная, которую нельзя изменять - это и будет константа :) Ну и поэтому переопределять родительские переменные нельзя. А в яве просто другая структура... там поле может в классе-наследнике превратится в сеттер / геттер и наоборот, поэтому там такой функционал нужен, а в АС - вы заранее задаете, что именно создаете, функцию или переменную.

lighto:
Глобальные константы тоже неьзя создать. Под глобальными константами понимается true, false, "", null, undefined и тому подобные. Максимально похожее, что вы можете сделать, это создать переменную уровня верхнего пакета. Но делать это не рекомендуется. И, как правило, если у вас возникла необходимость сделать что-то похожее, это значит, что вы плохо спланировали приложение.

Night_rainbow 23.09.2009 15:49

Цитата:

Сообщение от wvxvw (Сообщение 852888)
А в яве просто другая структура... там поле может в классе-наследнике превратится в сеттер / геттер и наоборот, поэтому там такой функционал нужен, а в АС - вы заранее задаете, что именно создаете, функцию или переменную.

Извините, не совсем понял. Поле в яве никак не может превратиться в сеттер/гетер.
У final в яве есть некоторые свойства const в си, например, но это не совсем const
Вот в википедии:
статья


Скажите, пожалуйста, как ActionScript обознаить НЕИЗМЕНЯЕМЫЕ поля класса? Ну чтобы эти поля не мог изменить ни потомок, ни родитель после инициализации этого поля?

То есть аналог явы:
Код AS3:

public final String someParam="Hello";


wvxvw 23.09.2009 17:53

Код AS3:

public const someParam = "Hello";

:)
А таких конечных переменных в АС нету, но можно имитировать если нужно:
Код AS3:

public final function set foo(value:Object):void
{
    if (_foo) return;
    _foo = value;
}

И это, а разве нельзя в суперклассе:
Код:

public Foo bar;
и в наследнике:
Код:

public Foo bar() { ... }
Я может ошибаюсь, но, помоему можно...

Night_rainbow 23.09.2009 18:29

Можно, но это ведь не геттер. По спецификации гетером называются методы вида:

Код AS3:

private String parameter;
 
public String getParameter(){
return parameter;
}


В яве нельзя вызвать гетер без ():
Вот смотрите:


Код AS3:

public class Parent {
    public final Integer integer=1;
}

Код AS3:

public class Child extends Parent{
    public Child(){
        integer = 0;      //ошибка компиляции
    }
    public Integer integer(){
        return 0;
    }
 
    public static void main(String[] args){
        Parent p = new Parent();
        System.out.println(p.integer+"");    //1
        Child ch = new Child();
        System.out.println(ch.integer);      //1
        System.out.println(ch.integer())//0
        p = ch;
        System.out.println(p.integer())//ошибка компиляции
        System.out.println(p.integer)//1
    }
}


wvxvw 23.09.2009 18:52

Прошу прощения, оговорился.


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

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