![]() |
Observer JS <---> AS
В проектах часто необходимо использовать связки JS с FLASH... Раньше использовался getURL, fscommand, сейчас ExternalInterface, но способ использования обычно ограничивался на вызовове разных функций.
Эта система работала хорошо, но приходилось заранее продумывать систему общения, задавать имена функций. Если немного подумать, можно схитрить и использовать всего две функции, одну входящую для JS и одну входящую для Flash, тогда отдавая в функцию два параметра, первый из которых "евент" и второй системный параметр, можно все упростить. Внутри функций можно написать простой парсер на switch и строить схему по входящим евентам. Эта схема не плоха и действует безукоризненно, пока колличество евентов не переваливает за сотню. Во флеше, очень удобна встроенна система евентов, но как было бы удобно если бы эта же система евентов распространилась и на JS. Например, JS говорит - flashMovie.addJSListener ( "click", myJSFunction ); и флешка добавляет слушателя, а при генерации события "click", любые подписанные на событие слушатели в JS получат уведомление. Теперь собственно вопросы: - А как делаете это взаимодействие Вы? - Есть ли какие-то готовые решения? |
Сделать то можно все что угодно. Вопрос размеров конечного JS файла. Проще использовать конкретные вызовы чем разрабатывать механизм прозрачного обмена сообщениями, производительный и небольшой по объему.
|
Вобщем вот набросок, рабочий. Если кому надо, юзайте.
Код:
package Использовать можно например так: Код:
var jsEvent = JSListener.instance ().JSEvent;Единственное что смущает, это то что приходится создавать синглтон и проводить инициализацию. Может можно сделать более красивое решение? |
Доработал класс. Некоторые возможности:
- прозрачная генерация и получение событий (JS <-> AS, AS <-> AS, JS <-> JS); http://qwehkwerjhbgkwe.livejournal.com/51060.html |
Большое спасибо за класс.
ЗЫ, я думаю тему есть смысл переместить в ФАК. |
Надо чтобы гуру форума заценили для начала ) Класс ведь реально весьма полезный и многим пригодится.
На всякий случай добавлю сюда код, т.к. в жж он побился. Вот некоторые возможности: - прозрачная генерация и получение событий ( JS <-> AS, AS <-> AS, JS <-> JS ); - возможность использовать флешку чисто, как обсервер для JS; - возможность рассылать события бродкастом, т.е. нам все равно где находится подписчик какая у него глубина вложенности и т.д.; - не имеет значения, где находится подписчик во флеш или в JS и не важно кто сгенерит событие. - есть событие __all__, при подписке к которому подписчик будет слышать вообще все евенты. Код:
package Например подпишемся на евент прямо во флеше, и получим его: Код:
EManager.inst.subscribe ( "myEvent", myFunc ); |
ничё прозрачного я в этом не вижу.
|
а что именно смущает?
|
собственно вся конструкция и смущает.
|
во всяком случае, я еще альтернатив не видел.
|
| Часовой пояс GMT +4, время: 06:38. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.