|
|
« Предыдущая тема | Следующая тема » |
Опции темы | Опции просмотра |
|
|
|||||
Как вызвать функцию класса из анонимной функции этого же класса?
Привет!
Прошу срочной помощи! Есть класс: 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,879
Записей в блоге: 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, время: 17:35. |
|
« Предыдущая тема | Следующая тема » |
Опции темы | |
Опции просмотра | |
|
|