![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Привет!
Прошу срочной помощи! Есть класс: class ConnectorClass {
public var command:String;
public var args;
public function ConnectorClass() {
this.watch("globalflag", varWatcher);
}
public function varWatcher() {
switch (command) {
case "load_movie" :
loadPage(args);
break;
// другие case не показаны
}
}
private function loadPage(filename) {
var page_mclListener:Object = new Object();
page_mclListener.onLoadInit = function(target_mc:MovieClip) {
fmessage(filename);
};
var page_mc_loader:MovieClipLoader = new MovieClipLoader();
page_mc_loader.addListener(page_mclListener);
page_mc_loader.loadClip(filename, _root.page_mc);
}
public function fmessage(par:String) {
_root.falert(par);
}
}
Как правильно вызвать ее из анонимной функции function(target_mc:MovieClip)? Мне надо по окончании загрузки клипа сообщить об этом в алерт!!! Спасибо. |
|
|||||
|
...
модератор форума
Регистрация: Sep 2006
Адрес: Minsk
Сообщений: 4,286
|
Нужно использовать Delegate, так как fmessage в анонимной функции function(target_mc:MovieClip) вызывается в области видимости page_mclListener.
|
|
|||||
|
Негуру
администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,883
Записей в блоге: 7
|
Вот так
class ConnectorClass {
public var command:String;
public var args;
private var __filename:String
public function ConnectorClass() {
this.watch("globalflag", varWatcher);
}
public function varWatcher() {
switch (command) {
case "load_movie" :
loadPage(args);
break;
// другие case не показаны
}
}
private function loadPage(filename) {
__filename = filename;
var page_mc_loader:MovieClipLoader = new MovieClipLoader();
//// забудь про пустый объекты ради загрузки
page_mc_loader.addListener(this);
page_mc_loader.loadClip(filename, _root.page_mc);
}
public function fmessage(par:String) {
_root.falert(par);
}
private function onLoadInit (target_mc:MovieClip) {
fmessage(__filename);
}
}
|
|
|||||
|
Привет!
С успехом применил поправки к коду, но просил бы пролить свет по вопросу "листенерства". Локальным объектом var page_mc_loader был подписан собственно класс (this). Но, функцию loadPage я буду использовать сотни раз в единственном объекте этого класса. Так как я нигде не отписываюсь, не загрузиться ли память неудаленными листенерами, несмотря на лакальность page_mc_loader? И есль это так, где мне применять removeListener? А также теоретический вопрос: можно ли узнать, есть ли, и сколько листенеров у определенного объекта? Спасибо. |
|
|||||
|
Спасибо, iNils.
По первому вопросу так и поступлю. В принципе, думал так сделать, но имел надежду, что с локальной переменной умрет и подписка. Теперь сомненья прочь! А "теоретический" вопрос возник из-за проблем в подгружаемом мувики - там создавался листенер. После перезагрузки нового мувика и создания такого же листенера встала проблема ссылки - старый объект был удален, но листенер держал его еще в памяти, отсюда сбой в работе. Теперь стало все ясно - откуда ноги росли. Я тогда обошел эту проблему так: _global выручил. Читал, что глобальные переменные "не есть хорошо". Интересно, можно ли после удаления объекта (в моем случае userKey) впоследствии удалить ссылку, чтоб не пользоваться _global? |
|
|||||
|
Немного продолжу тему таким вопросом - есть класс, примерно такой:
Ве достаточно просто. Передаем указатель на MovieClip, в нем создаем переменную caller, которой присваиваем экземпляр класса. А затем просто вызываем функцию. Т.е. логически все верно, но скомпилировать этот код нельзя, т.к. Flash сообщает, что у свойства caller нет метода obj_move_process. Точно также вызывает ошибку и this.onMouseMove, т.к. у класса MyClass нет метода onMouseMove. Как от этого избавиться??? Последний раз редактировалось Dr.OH; 08.06.2008 в 18:55. |
|
|||||
|
Dr.OH, это уже другая тема, незачем постить в чужой топик
по вопросу: у MyClass (если он наследник Object, а не MovieClip) нет onMouseMove и как следствие obj_move изначально провальный как метод MyClass если нужно передать его obj.caller' у, то держать его надо в виде свойства как анонимную функцию: ps: зачем такие выверты нужны не оч. понятно.. |
![]() |
![]() |
Часовой пояс GMT +4, время: 12:01. |
|
|
« Предыдущая тема | Следующая тема » |
|
|