![]() |
Композиция
Сталкиваюсь с такой бедой уже несколько раз, надоело - хочу разобраться!
Есть Класс которий аттачит МС в котором кнопке ( на самом деле мувику) нужно присвоить онРоллОвер и прочие онПресс, чтоб по ним вызывалась функция из этого же класса. вот тут и беда. как дать бедной кнопке понять что нужно функцию вызывать из класса а не искать толко в "себе". Делать класс статичным тоже не очень хороший выход. Как кто реализует такие доступы? для примера: Код:
class MyClass { |
Используют класс Delegate
|
А если не сложно на можешь на моём примере показать? а то чтот я читаю и не вкуриваю совершенно как она работает.. :confused:
|
Код:
import mx.utils.Delegate |
Simplier
А что, по-простому уже не модно?
Код:
class MyClass { |
Цитата:
|
Better
Были разные. Теперь область видимости одна. Работает. А все потому что присутствовала порочная методика определения метода в методе...
|
Ariel, свой код нужно проверять перед публикацией. Он не рабочий. Трейс сработает, да. А вот trace(this) выведет совсем не то, что ожидалось. Области разные.
|
iNils, ты привел пример про область видимости функций, а как быть с областью видимости объектов, заданных в этом же классе?
|
Если я верно понял вопрос, то я не использую классический Delegate, а использую свой в котором можно передавать аргументы (вообще есть и другие реализации). Если мне нужно, что бы внутри update я мог ссылать на объект который вызвал этот update, то я указываю его в качестве параметра. А писать как предложил Ariel в корне не верно.
|
iNils, ты кому отвечал?
Повторю вопрос. На пальцах пример, есть class в котором реализованна функция, в этой функции еще функция, которая нуждается в свойствах переменных определенных в классе... вот до них достучаться нельзя. Или я просто не умею. Delegate тут не поможет, потому как он обращается к функциям, а мне надо к объектам. Короче, iNils, дай мне свою асю или мыло в личку. Я тебе скину исходник, в котором в Fla все работает, а в классе не хочет. Спасибо |
2 __etc ::
Наезд таки несправедлив. Хотя, скорее всего, непонятка происходит.. 1) Код рабочий. О чем в посте и подписано. 2) trace(this) в моем коде отсутствует. 3) Целью публикации моего примера была простая реализация перегрузки события onPress. Для решения этой задачи Делегат не нужен. |
Ariel, приведенный пример в дальнейшем приведет к новым вопросам и в, конечном итоге, к выводу, что этот код нерабочий.
1) Рабочий в пределах трейса; 2) Лишь только по этому работает; 3) Плохой пример, абсолютно. В дальнейшем возникнут основательные проблемы, за которые спасибо не скажут. Спорить будем? |
best code
2 __etc ::
Любой код должен решать поставленную перед ним задачу. Функционал обработчика события onPress определен не был. Да и спорить с Вами, уважаемый, себе дороже.. :) Еще плюсов навешаете или забаните под горячую руку.. Скажем, за неуважение к корифеям.. :away: Вообще, создается впечатление, что за увлекательным занятием наказывания юзер0в Вы проводите довольно значительную часть жизни. Народ вылетает с форума только так! |
Цитата:
Надо немножко думать вперед, совсем чуть-чуть. з.Ы. Всё остальное твое написанное — флейм, тянущий на +4 и +5, к сведению. Если уж на то пошло, то бан получают либо совсем безбашенные товарищи, либо рекламщики, коих не так уж и много (я-то знаю). Так что, во избежании лишних квадратных скобочек под никами, сие обсуждение закрыто. Причем тут кривой код приведенного «решения» и какая связь между моей деятельностью, вообще непонятно. Если это аргумент «протев», то смахивает на какую-то совершенно левую отмазку от собственной некомпетентности (ну или просто ляпа, кои возможны у любого человека). |
Цитата:
|
Да уж.. развели дисскуссию... я всетки вернусь к своим баранам.
Непонимание работы класса Делигейт (не смог я передать ни обьект ни его свойства с помощью этого класса) и поиск по этой теме навели меня на простой пример со ссылкой на обьект. Есть ли какие-то приемущесва/недостатки этого способа по сравнению с использованием класса Делигейт в данном конкретном случае. Или забегая вперёд может что-то возникнет в будущем чего я пока не предусмотрел. вот пример моего исправленного кода: Код:
class MyClass { |
Методы в методе объявляют в AS1, но никак не в AS2/AS3. Почему? Потому что появляются паразитные ссылки, которые приведут к тому, что экземпляр класса не получится удалить. Более того, подобная конструкция очень хрупкая, нарушить области видимости и прийти к полному хаосу можно ещё быстрее. Кроме того, сбивает с толку this, который ссылается не на экземпляр класса, а на кнопку. Ну и в конце-концов, такой код типизировать проблематично.
iNils привел рабочий код. |
Ок, спасибо за разъяснение. У меня наверно последний вопрос, как мне из функции "update" обратится к вызвовшему её клипу, в данном случае "container.btn" ???
Спасибо. |
Правильно ли будет просто сохранить ссылку на етот клип?
Код:
import mx.utils.Delegate; |
Зачем??
У вас есть ссылка на клип container, она же доступна и в update (области видимости не изменялись). Т.е. Код:
import mx.utils.Delegate; |
Да действительно, сменил шило на мило...
Спасибо. |
А по-хорошему, обращаться к вложенным клипам вот так вот нехорошо.
|
Так может быть подскажете более правильный способ?
хотя у меня и работает все прекрасно, но не хочется наступать на одни и теже грабли. |
Я бы сделал класс для этого клипа и событийную модель.
|
| Часовой пояс GMT +4, время: 20:34. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.