Контекстное меню @ DeForum.ru
DeДверь  
Логин:  
Пароль:  
  Автологин  
   
Разместить рекламу
Письмо админу
Правила | FAQ | *Поиск | Наша команда | Регистрация | Вход
 
 
 Страница 1 из 1 [ Сообщений: 4 ] 
*   Список форумов / Технологии изображения / Flash » ответить » создать топик « | »
Автор Сообщение
FanFan Муж.
соучастник
44
Сообщения: 973
Зарегистрирован: 24.04.06
Откуда: Омск
Заголовок сообщения: Контекстное меню
Сообщение Добавлено: 24 Июнь 2008, 06:17:43 
Вот есть такая проблемка.

Задача: Заполнить контекстное меню из массива.

Но проблема в том, что когда я заполняю контекстное меню массивом в цикле for, то как будто я ничего и не меняю.

Вот примеры(я их упростил).

Пример 1.Тут все работает
Сначала я объявляю контестную менюху, потом в функции ее изменяю

Код:
//Объявляем Контекстное меню
_global.my_cm = new ContextMenu();
_global.selectMenuItem = new ContextMenuItem("Пункт", selectHandler);
_global.my_cm.hideBuiltInItems();
_global.my_cm.customItems.push(_global.selectMenuItem);
function selectHandler() {
}
this.menu = _global.my_cm;
////конец контекстное менюхе


buildMenu();

function buildMenu() {
        _global.my_cm.customItems.pop();
   _global.selectMenuItem2 = new ContextMenuItem("Пункт2", ddd);
   _global.my_cm.customItems.push(_global.selectMenuItem2);
   function ddd(){}
}


Пример 2
Но здесь я создаю в функции массив и пытаюсь его забить в менюху, ничего не пашет(
Код:
//Объявляем Контекстное меню
_global.my_cm = new ContextMenu();
_global.selectMenuItem = new ContextMenuItem("Пункт", selectHandler);
_global.my_cm.hideBuiltInItems();
_global.my_cm.customItems.push(_global.selectMenuItem);
function selectHandler() {
}
this.menu = _global.my_cm;
////конец контекстное менюхе


buildMenu();

function buildMenu() {
   var myArray:Array = Array("111", "222", "333"); // масивчик забитый рыбой
   for (i=0; i<myArray.length; i++) {
      _global.selectMenuItem2 = new ContextMenuItem(myArray[i], ddd);
 //ddd-это функция которая будет выполнятся при нажатии на пункт меню
      trace(myArray[i]);
      _global.my_cm.customItems.push(_global.selectMenuItem2);
      function ddd() {
      }
   }
}


Вообщем, если было лень читать написанное выше и разбираться, задаю вопрос проще, почему в цикле не заполняется контекстное меню, и можно ли это как то обойти. Либо я вообще все не так делаю. Подскажите плиз! :frown:

_________________
Портфолио
Мигель Муж.
участник
75
Сообщения: 1453
Зарегистрирован: 09.01.04
Откуда: http://design-cafe.ru
Сообщение Добавлено: 24 Июнь 2008, 11:57:19 
Код:
var cm:ContextMenu = new ContextMenu();
var cm_items:Array = ["p1", "p2", "p3"];
function ci_callback(obj:Object, ci:ContextMenuItem):Void
{
   trace("selected: " + ci.caption);
   trace("over: " + obj);
}

cm.hideBuiltInItems();
for (var i = 0; i < cm_items.length; i++)
{
   trace(cm_items[i]);
   var cmi:ContextMenuItem = new ContextMenuItem(cm_items[i], ci_callback);
   cm.customItems.push(cmi);
}
this.menu = cm;


с глобалами помойка. глобайльная.
Разбираться почему не работает код не хочется, хотя я почти 100% уверен, это потому, что в качестве callback функции указана nested функция ddd() (то есть она объявлена локально в теле другой функции, и как все другие локальные перемнные умирает с последней фигурной скобкой)
Колбеки выносите в область видимости контекстного меню.

_________________
_____
Работа Изображение Работы Изображение О Работе
@st@l@vist@
участник
70
Сообщения: 1606
Зарегистрирован: 20.03.03
Откуда: St.Petersburg
Сообщение Добавлено: 24 Июнь 2008, 12:12:08 
Проблема тут конечно же с ddd, но только в том, что она в теле цикла объявлена :)
FanFan Муж.
соучастник
44
Сообщения: 973
Зарегистрирован: 24.04.06
Откуда: Омск
Сообщение Добавлено: 24 Июнь 2008, 16:45:44 
всем спасибо
проблема действительно с этим, не углядел)

_________________
Портфолио
*   Список форумов / Технологии изображения / Flash « | » » ответить » создать топик
 Страница 1 из 1 [ Сообщений: 4 ] 
Показать сообщения за:   Поле сортировки  
Найти:
Перейти:  
Уровень доступа: Вы не можете начинать темы. Вы не можете отвечать на сообщения. Вы не можете редактировать свои сообщения. Вы не можете удалять свои сообщения. Вы не можете добавлять вложения.
cron


ООО ДеФорум
При использовании материалов сайта ссылка на DeForum.ru — обязательна.
Проект Павла Батурина ©2001-2077; // Powered by phpBB © 2013 phpBB Group
Rambler's Top100