Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Делаю меню. Не представляю как назначить команды. (http://www.flasher.ru/forum/showthread.php?t=139841)

proxiServer 12.05.2010 18:26

Делаю меню. Не представляю как назначить команды.
 
Делаю двухуровневое меню. Меню генерируется на основе данных в двумерном массиве. Пункты меню имеют событие "нажали". Я думаю и не могу сообразить, как заставить при нажатии на пункты меню вызывать функцию или метод и можно ли передать им параметры?

Меню типа "файл правка вид". Программно создал массив. Меню сгенерилось. А как мне теперь заставить по этому событию запускать windows.show("справка"), а по другому функцию foo()?

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

благодарен.

gloomyBrain 12.05.2010 18:42

Просто диспатчите клик.
В обработчике проверяете evt.target - какое у него свойство "commandName"
Далее просто switch, который выполняет что-то еще в зависимости от commandName

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

incvizitor 12.05.2010 19:41

А еще можно в xml или с чего у Вас там генерится меню прописать названия функций а потом вызывать их с getDefinitionByName.

Но можно и гибридное меню (как я обычно делаю).

Код AS3:

switch(commandName){
case "kuriza":
        kuriza();
break;
case "zorro":
        zorro();
break;
default:
        var f=getDifinitionByName(commandName);
        f()
break;
}


expl 13.05.2010 02:23

Цитата:

Можно сделать несколько своих событий. Тогда можно разнести этот огромный switch на несколько маленьких внутри обработчиков каждого из видов событий. Событию можно сделать свойство commandName, а тип события будет определять тип обработчика
Можно и без switch, добавить к узлу вашего двумерного массива ссылку на функцию которую нужно вызвать и все!
Можно вместо функции можно сохранить в узле объект-команду, которую узел дернет при клике по нему.

Недостатки по сравнению с сохранением имени функции и вызовом по getDifinitionByName - ну разве что из xml-ки не сгенеришь, ну и при создании меню все комманды/методы должны существовать
Достоинтва - не опечатаешься в имени функции

proxiServer 13.05.2010 10:53

А есть что-нибудь на подобии:
Код AS3:

        function callFunction (functionName:String,functionArgs:Array):*;

Что бы к фунции обратиться и параметры передать сразу. Не то что бы мне это необходимо) Скорее из любопытства.

i.o. 13.05.2010 11:00

есть
Код AS3:

Function.apply( thisArg:*, argArray:* ):*
Function.call( thisArg:*, ...args ):*



Часовой пояс GMT +4, время: 19:22.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.