AS3 - Как присвоить загрузчику имена или теги?

У меня есть список изображений, которые я загрузил с помощью класса Loader, но мне трудно присвоить им уникальные имена. Мне нужны уникальные имена, потому что я хочу через некоторое время удалить определенные изображения. Есть ли способ присвоить загрузчикам имя или какой-то уникальный тег, чтобы я мог удалить их позже? благодаря.

Вот часть моего кода

for (var i = startnum; i < endnum; i++){
    var thumb = panels[i].@THUMB;
    var thumb_loader = new Loader();
    thumb_loader.load(new URLRequest(thumb));
    thumb_loader.contentLoaderInfo.addEventListener(Event.COMPLETE, thumbLoaded);

    thumb_loader.name = i;
    thumb_loader.x = (thumb_width + 20)*i;
}

Я пробовал использовать getChildByName в другой функции ..

var myLoader:Loader = getChildByName( "1" ) as Loader;
myLoader.unload();

Но это дает мне Ошибка № 1009: невозможно получить доступ к свойству или методу ссылки на пустой объект.

Я попытался поставить thumb_loader как глобальную переменную и сделаю это

var myLoader:Loader = thumb_loader.getChildByName( "1" ) as Loader;

Но все равно не работает. Спасибо.

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
5 459
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

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

var img:Image;
var img_map:Object = new Object();
var last_added:int = 0;
for each (img in yourListOfImages)
{
    img_map["img_"+last_added] = img;
    last_added++;
}

В зависимости от вашей среды (Flex или Flash) вы можете использовать генератор UID вместо моих упрощенных уникальных имен выше.

package 
{
    import flash.display.Loader;

    public dynamic class DynamicLoader extends Loader 
    {
        public function DynamicLoader()
        {
            super();
        }
    }
}

Я считаю, что класс Loader - это запечатанный класс, поэтому вы хотели бы создать этот класс и использовать его вместо обычного класса Loader, чтобы присвоить ему любой атрибут, который вы хотите. Я также считаю, что без использования этого DynamicLoader вместо обычного Loader класс Loader действительно имеет доступное свойство name.

Ответ принят как подходящий

Все экранные объекты в ActionScript 3 имеют свойство name. Всякий раз, когда вы создаете объект Loader, вы можете присвоить ему имя следующим образом:

var myLoader:Loader = new Loader();
myLoader.name = "myUniqueName";
myLoader.load( .... );
addChild( myLoader );

Если вы хотите ссылаться на загрузчик по имени, которое вы ему дали, используйте метод getChildByName ().

var myLoader:Loader = getChildByName( "myUniqueName" ) as Loader;
myLoader.unload();

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

loadersArr["uniqueName"] = thumb_loader;

Затем вы можете ссылаться на свои загрузчики со своим уникальным именем через массив loadersArr.

var loaderToUnload:Loader = loadersArr["uniqueName"];
loaderToUnload.unload();

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

но это дает мне эту ошибку. Ошибка № 1009: Невозможно получить доступ к свойству или методу ссылки на нулевой объект.

shibbydoo 24.11.2008 21:05

Трудно понять, почему вы получаете эту ошибку, не видя своего кода.

Matt W 24.11.2008 21:21

Другие вопросы по теме