Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Доступ к локальной переменной "извне" (http://www.flasher.ru/forum/showthread.php?t=131200)

Ynks 15.10.2009 00:58

Доступ к локальной переменной "извне"
 
Салют! В AS3 начинающий. Поэтому стлокнулся с такой вот трудностью. Есть код:
Код AS3:

var tfCount:int;
function xmlLoadComplete(event:Event):void
                {
                        var newsPaper:XML = new XML(event.target.data);
                        var newsCount:int =  newsPaper.@count;
                }

Глобальная перменная tfCount - это кол-во элементов массива, которое зависит от кол-ва новостей в XML файле. Локальная переменная newsCount - это и есть кол-во новостей. Мне нужно глоб. переменной tfCount присвоить значение newsCount.

Как это сделать? Только без технарских замашек, а так, чтобы понятно было. Ну или предложите альтернативную реализацию. Просто не хочется весь остальной код писать в функции xmlLoadComplete. Спасибо.

Возможно уже и была такая, тема. Даже я ее нашел вроде-бы, но там так написано все, что находясь на моем уровне знаний AS3 сложно понять.

Lecosson 15.10.2009 01:29

Код AS3:

var tfCount:int;
function xmlLoadComplete(event:Event):void
                {
                        var newsPaper:XML = new XML(event.target.data);
                        var newsCount:int =  newsPaper.@count;
                        tfCount=parseInt(newsCount);
                }


Ynks 15.10.2009 10:05

Насколько я знаю parseInt преобразовывает String в Int. Но это не делает доступной мою переменную newsCount вне функции.

Задача у меня такая, чтобы обработать весь XML, вытянуть с него все и позаливать в переменные. Все. А потом уже у других функциях удобно с ними рабтать, а не в xmlLoadComplete все делать. Кото, что подскажет?

kackbip 15.10.2009 10:15

Нука внимательнее приглядитесь к варианту предложенному Lecosson. он не обращается к newsCount вне функции и притом выполняет поставленную вами задачу - "вытянуть в сего все и позаливать в переменные".

Ynks 15.10.2009 10:27

Хм, либо я чего-то не пойму либо вы. newsCount - это уже int. Зачем его снова в int преобразовывать? Это раз, а два — это то, что при таком коде:
Код AS3:

var tfCount:int;
function xmlLoadComplete(event:Event):void
                {
                        var newsPaper:XML = new XML(event.target.data);
                        var newsCount:int =  newsPaper.@count; //newsCount = 8;
                        tfCount=newsCount; //либо parseInt(newsCount) — этот код не работает, только что попробовал;
trace(tfCount);//Выведет 8
                }
trace(tfCount);//Выведет 0

Истинное значение tfCount не будет доступно вне функции. А нужно, чтобы вне функции tfCount тоже был равен 8. Вот.

alecsisk 15.10.2009 10:33

tfCount'у присваивается 8 только после выполнения xmlLoadComplete. После tfCount=newsCount вызывайте нужную вам функцию в которой будет дальнейшее выполнение программы.

incoob 15.10.2009 10:35

напишите просто
Код AS3:

tfCount=newsCount

скорее всего Lecosson просто не обратил внимания на тип
Код AS3:

newsCount

и подумал, что это строка

PS локальные переменные не видны вне области метода

Ynks 15.10.2009 10:41

Цитата:

После tfCount=newsCount вызывайте нужную вам функцию в которой будет дальнейшее выполнение программы.
Но при вызове этой функции tfCount будет равен все-равно 0, а не 8.

Если пишу просто tfCount=newsCount — то см. мой код выше. Результат есть, но не тот, что нужно. :)

Цитата:

PS локальные переменные не видны вне области метода
Вот в этом-то и дело... :( А как мне тогда быть?
Не хочу остальной код новостоного модуля своего (я его делаю) писать в функции xmlLoadComplete...

alecsisk 15.10.2009 10:53

А вы проверяли ?
Код AS3:

var tfCount:int;
xmlLoadComplete(null);
 
function xmlLoadComplete(event:Event):void {
        tfCount=8;
        someMethod();
}
 
 
function someMethod():void {
        trace(tfCount); // 8
}

Цитата:

Если пишу просто tfCount=newsCount — то см. мой код выше. Результат есть, но не тот, что нужно.
Код AS3:

var tfCount:int;
function xmlLoadComplete(event:Event):void
                {
                        var newsPaper:XML = new XML(event.target.data);
                        var newsCount:int =  newsPaper.@count; //newsCount = 8;
                        tfCount=newsCount; //либо parseInt(newsCount) — этот код не работает, только что попробовал;
trace(tfCount);//Выведет 8
                }
trace(tfCount);//Выведет 0

естественно. Вы думаете что сначала компилятор выполнит xmlLoadComplete, а затем trace(tfCount). Но сначала выполняется trace(tfCount) //0, а затем приходит событие xmlLoadComplete, где уже tfCount == 8.

incoob 15.10.2009 11:00

Цитата:

Сообщение от Ynks (Сообщение 857977)
Не хочу остальной код новостоного модуля своего (я его делаю) писать в функции xmlLoadComplete...

вы свой код вызывайте из xmlLoadComplete


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

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