PDA

Просмотр полной версии : возврат из Функц


tj0mka
20.12.2005, 18:50
есть такая фишка

readfile = new XML();
readfile.ignoreWhite = true;
readfile.onLoad = function(ok) {
if (ok) {
var str = readfile;
}
};
readfile.load("test.txt");

win.htmlText = str; <- str пуст! почему? как правельно нада делать?

Stone
20.12.2005, 18:54
readfile = new XML();
readfile.ignoreWhite = true;
readfile.onLoad = function(ok) {
if (ok) {
var str = readfile;
win.htmlText = str;
}
};
readfile.load("test.txt");

ты записываешь в текст значения которые еще не загружены.

tj0mka
20.12.2005, 19:02
function file(filename) {
readfile = new XML();
readfile.ignoreWhite = true;
readfile.onLoad = function(ok) {
if (ok) {
str = readfile;
}
};
readfile.load(filename);
return str; // ????
}


var f;
f = file('test.txt');
win.htmlText = f;


вот как мне нада, чтобы была функция..
как мне правельно возвратить значение?

Stone
20.12.2005, 19:10
onData

Stone
20.12.2005, 19:32
onData написав этот код и нажав валшебную кнопку F1 ты увидешь код который тебе нужен.

tj0mka
20.12.2005, 20:06
readfile.onData = function(ok) {
return ok;
};

всёравно я немагу выйти из этой левой функции..
ну как мне достать переменную от туда?

IeshuaGaNocry
21.12.2005, 04:07
readfile.onLoad = function(ok) {
if (ok) {
str = readfile;
}
};

onLoad - наступает только тогда, когда файл полностью загружен.
пиши так:

...
readfile.onLoad = function(ok) {
if (ok) {
var str = readfile;
win.htmlText = str;
}
};
...

Antares
21.12.2005, 05:04
Преимущество onData в данном случае в том, что не надо будет писать в файле переменную. Параметр src, передаваемый обработчику события onData, будет содержать весь текст файла.

Тьйомка, могу сказать только одно: пытаясь получить значение, которое неизвестно когда будет доступно (мы заранее не знаем, когда загрузка закончится) из функции (как ты это пытался сделать в своем предыдущем треде, утверждая, что мой код "непашет скажи как сделать так чтоб запахал"), ты не учитываешь одного: функция выполнится, не дожидаясь окончания загрузки и выполнения обработчика.

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

Но т.к. читать документацию и туториалы ты не хочешь, а тебе нужно готовенькое, объяснять подробнее я не стану.

IeshuaGaNocry
21.12.2005, 05:53
Чего то ты сложно загнул для него мне кажется =)
2tj0mka
Тут понять главное:
Строчки скрипта выполняются последовательно.
Скрипт дал команду загружать текстовый файл, содержимое этого файла скрипт может взять !только после того как этот текстовый файл загрузится на 100%, следовательно этот момент нужно отслеживать.
А документацию и туториалы реально полезно читать.

tj0mka
21.12.2005, 09:53
а можна програмно создать Text окно (Text tool) ,
и тогда вставить туда тексть из файла

function file(filename) {
readfile = new XML();
readfile.ignoreWhite = true;
readfile.onLoad = function(ok) {
if (ok) {
// тут както создать Text окно
win.htmlText = readfile;
}
};
readfile.load(filename);
// а тут его прочитать в переменную и зделать return
return win.htmlText;
}


var f;
f = file('test.txt');
win.htmlText = f;

Или в AS ваще нельзя не как return'am пользаватся?
Я проста PHP програмер, пользуюсь пхп свойствами в AS, и нечего невыходит.. вот и парю вам мозг..

Skubent
21.12.2005, 12:18
Путь JS -> AS несколько ближе, чем php->AS.
Я смотрю, не поминаешь, что тебе говорят...
Представь, что тебе нужно не файл прочитать, а поймать, куда юзвер мушкой нажал. Ты напишешь что-то похожее на

function MouseClick() {
return (mouse.press) ? mouse._x+"-"+mouse._y : 0;
}

И будешь ждать, когда же оно сработает ?
Или все таки задумаешься о написании onclick()?

Тут тоже самое, то, что ты заказал данные, не означает, что они сразу же прилетели. load() - начинает загрузку, а будет ли она завершена к моменту исполнения следующей строчки - неизвестно.

Antares
21.12.2005, 12:33
В php все события синхронизированы, то есть если выполнение строки n требует 0.1 с, то строка n + 1 будет выполнена ровно через 0.1 после начала выполнения n, в AS же все как в Java.

Но по-моему непонимание, почему "не работает" вот так:

...
function A()
{
function B()
{
return "Foo";
}
}

trace(A()); // Ничего, ессно, возвращено не будет
...

это вовсе не от программирования на php, а от незнания как работает return. А работает он во всех языках одинаково.

tj0mka
21.12.2005, 13:32
значет так как я хачю, невазможна зделать?

tj0mka
21.12.2005, 13:39
<?
function a(){
global $a;
function b(){
global $a;
$a='test';
}
b();
print $a;
}
a();
?>

// result: test

в AS _globa.variable я пробавал, и нечего невышла..

Antares
21.12.2005, 14:50
ой ё... Короче, делаем так

function A()
{
function B()
{
// Вернет в область видимости функции A!! Но никак не выше
return "foo";
}
// А вот это -- уже "наружу"
return B();
}

var returned = A();
trace(returned);


и больше вопросов не задаем, а просто читаем про области видимости. Без понимания, куда return возвращает значение, ничего серьезного не сделаешь.

tj0mka
21.12.2005, 15:26
как я могу её вызвать, если у неё даже имени нету..

readfile.onLoad = function(ok) {
win.htmlText = readfile;
}


function(ok){
а где имя?
function имя(ok){

Antares
21.12.2005, 15:51
(хватается за голову)
Объясняйте дальше сами, я больше не могу :)

tj0mka
21.12.2005, 17:03
:confused:

Antares
21.12.2005, 17:47
Намек: события имеют свойство происходить без нашего вмешательства.

tj0mka
21.12.2005, 21:00
крч скажи прямо что ты незнаеш как зделать так как я хачю

Antares
21.12.2005, 21:03
Говорю прямо: знаю. ;)))
Но ты все равно ведь не поверишь, а исходник с примером я тебе не сделаю -- ты слишком ленив.

Antares
21.12.2005, 21:14
Типа, сжалился :))
Держи. Если после этого будут вопросы -- то ты не программер на php. Ты даже не "дизайнер на фотошоп".


/**
*
* @usage file('http://www.novemberain.com/', myHandler);
* @param url URL
* @param handler Обработчик события о загрузке
* @return Булева величина. false, если один из параметров не указан или равен null
*/
function file( url:String, handler:Function ) : Boolean
{
// Если адрес или обработчик не определены, выходим, возвращая false
if(!url || !handler)
return false;

var myLV:LoadVars = new LoadVars();

// Событие onData возникает, когда все содержимое файла загрузилось, но пары "имя-значение" еще не были разбиты
// Присваиваем обработчик, который передали
myLV.onData = handler;
// Грузим
myLV.load(url);

return true;
}

// Пример использования асинхронных функций

var myStringVar:String = "";

// Обработчик. Flash передаст обработчику события onData параметр src, содержащий текст файла, еще не разбитый на пары "имя-значение"
function myHandler ( src:String ) : Void
{
// Присваиваем текст компоненту TextArea
myTextArea.text = src;

// Записываем в переменную, не забываем про области видимости
myStringVar = src;

// Выводим
trace(src);
}

// Загружаем. Обратим внимание на передачу ссылки на функцию-обработчик
if(file('http://www.novemberain.com/?p=73', myHandler)) trace('Загрузка начата...');