Ну, чувак, если ваш вопрос был о том, почему загрузчик находится вне области видимости, вот ваш ответ:
На самом деле, загрузчик, который вы видите в методе конструктора классов (CCM), не тот, который высм. в onComplete: LINE14: var loader:URLLoader = URLLoader(evt.target);
(я не знаю, почему людям нравится ставить одно и то же имя в переменные, это может сбивать с толку, но сейчас я объясню это не так)
Магия заключается в evt.target
.Но вы должны спросить себя: "Что делает .target
?"Ну, это переменная экземпляра, определенная «объектом события», и она предоставляет ссылку на «целевой объект».
Если вы не знаете, что такое «цель события», прочитайте этот параграф.«Event Target» - это объект, в котором слушатель зарегистрирован на LINE9: loader.addEventListener(Event.COMPLETE, onComplete);
Как видите, это загрузчик в CCM (пожалуйста, не путайте имена загрузчиков), который ссылается на new URLLoader();
.Заключение параграфа: «Цель события» - это объект URLLoader, на который ссылается локальная переменная загрузки в CCM.
Что ж, используя переменную .target, вы можете иметь ссылку на объект URLLoader, а затем использовать ссылку по своему усмотрению.В этом случае вы использовали ссылку для удаления слушателя.Это нормально.
Вот улучшенная версия (только одна переменная экземпляра, которая предоставляет ссылку на URLLoader):
package {
import flash.display.Sprite;
import flash.events.*;
import flash.net.*;
public class URLLoaderExample extends Sprite {
private var lalala:URLLoader;
public function URLLoaderExample() {
lalala = new URLLoader();
lalala.addEventListener(Event.COMPLETE, onComplete);
lalala.load(new URLRequest("example.txt");
}
private function onComplete(evt:Event):void {
trace ("Received data: " + lalala.data);
lalala.removeEventListener(Event.COMPLETE, onComplete);
}
}
}
Но просто чтобы убедиться, что вас не путают с именами:
package {
import flash.display.Sprite;
import flash.events.*;
import flash.net.*;
public class URLLoaderExample extends Sprite {
public function URLLoaderExample() {
var blabla:URLLoader = new URLLoader();
blabla.addEventListener(Event.COMPLETE, onComplete);
blabla.load(new URLRequest("example.txt");
} // 'loader' fell out of scope here! and it fell look there
private function onComplete(evt:Event):void {
var phopho:URLLoader = URLLoader(evt.target);
trace ("Received data: " + phopho.data);
loader.removeEventListener(Event.COMPLETE, onComplete);
}
}
}
Приветствия ... Если у вас есть какие-либо сомнения относительно операции приведения, используемой в URLLoader(evt.target);
, вы можете спросить.