Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 1.0/2.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 24.07.2006, 17:45
~~~ вне форума Посмотреть профиль Отправить личное сообщение для ~~~ Посетить домашнюю страницу ~~~ Найти все сообщения от ~~~
  № 1  
Ответить с цитированием
~~~
 
Аватар для ~~~

блогер
Регистрация: Nov 2003
Адрес: 117593, Россия, Москва
Сообщений: 211
Записей в блоге: 2
Отправить сообщение для ~~~ с помощью ICQ Отправить сообщение для ~~~ с помощью AIM Отправить сообщение для ~~~ с помощью Yahoo Отправить сообщение для ~~~ с помощью Skype™
Question Динамическое построение функции (вопрос к реал.знающим AS1 - 2)

Динамическое построение функции (вопрос к реал.знающим AS1 - 2)

Код:
for (var i = 0; i<libsreg.firstChild.childNodes.length; i++) {
	libName[i] = libsreg.firstChild.childNodes[i].attributes.name;
	libLink[i] = libsreg.firstChild.childNodes[i].attributes.link;
	libExt[i] = libsreg.firstChild.childNodes[i].attributes.ext;
	//trace(libName[i]+":"+libLink[i]+":"+libExt[i]);
	/////////////////////////////////////
	set("onMenuClick_"+libName[i], function () {
		stat_txt.textColor = 0;
		det = libLink[i];
		ext = libExt[i];
		mdm.prompt(libName[i]+" Library loaded");
		// значения 'libName[i]' в сгенерённой функции остаются именно 'libName[i]', а не присвоенное libName[i] значение во время создания функции.
	});
}
Что делаем:
В цикле генерим кучу callback-функций взависимости от содержания XML.
Каждая нода = навая функция.

На выходе реально получаем правильно названные функции, типа:
onMenuClick_BLABLA() , при соответствующем атрибуте ноды XML:
<k name="BLABLA" link="libs/BLABLA.dll" ext=".bla"></k>...
ОДНАКО:
Внутри функции значения, типа 'libName[i]' в сгенерённой функции остаются именно 'libName[i]', а не присвоенное libName[i] значение во время создания функции. Т.к. когда далее она вызывается зачения libName[i] равны undefined или последнему созданному в цыкле, это естественно "не катит"!

Суть вопроса:
Как это обойти?
Как добиться того чтоб внутри уже скенерённой функции сохранялась строка вида не ' ext = libExt[i]; ' , a ' ext = "статическое значение"; ' , где "статическое значение" = статическое значение, полученное, при создании функции, из соответствующей ноды>атрибута> xml.

Заранее благодарю.
С уважением Александр Козловский.
__________________
WebLog:http://flashimp.ru
IDE: http://Visuvio.com


Последний раз редактировалось iNils; 24.07.2006 в 20:06.
Старый 24.07.2006, 18:48
~~~ вне форума Посмотреть профиль Отправить личное сообщение для ~~~ Посетить домашнюю страницу ~~~ Найти все сообщения от ~~~
  № 2  
Ответить с цитированием
~~~
 
Аватар для ~~~

блогер
Регистрация: Nov 2003
Адрес: 117593, Россия, Москва
Сообщений: 211
Записей в блоге: 2
Отправить сообщение для ~~~ с помощью ICQ Отправить сообщение для ~~~ с помощью AIM Отправить сообщение для ~~~ с помощью Yahoo Отправить сообщение для ~~~ с помощью Skype™
Прошу прощения за замороченность вопроса, просто я последнее время очень много проф.тех.документации написал...
__________________
WebLog:http://flashimp.ru
IDE: http://Visuvio.com

Старый 24.07.2006, 19:45
silin вне форума Посмотреть профиль Посетить домашнюю страницу silin Найти все сообщения от silin
  № 3  
Ответить с цитированием
silin
 
Аватар для silin

блогер
Регистрация: Mar 2003
Адрес: Моск. обл.
Сообщений: 5,269
Записей в блоге: 6
как пишешь libName[i], так и получаешь (прикинь чему равна i на момент вызова твоих функций..)
можно сохранять идентификатор в самой функции и использовать его для доступа к данным при вызове:
Код:
var libsreg=new XML('<list><k name="BLA" /><k name="BLABLA" /></list>');
var libName=[];
for (var i = 0; i<libsreg.firstChild.childNodes.length; i++) {
	libName[i] = libsreg.firstChild.childNodes[i].attributes.name;
	/////////////////////////////////////
	var f=this["onMenuClick_"+libName[i]]=function (){
		trace(libName[arguments.callee.id]);
	};
	f.id=i;
	
}
onMenuClick_BLABLA();//BLABLA
onMenuClick_BLA();//BLA

Старый 24.07.2006, 20:07
iNils вне форума Посмотреть профиль Отправить личное сообщение для iNils Посетить домашнюю страницу iNils Найти все сообщения от iNils
  № 4  
Ответить с цитированием
iNils
Негуру
 
Аватар для iNils

администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,879
Записей в блоге: 7
~~~, прочтите пункт 3 http://www.flasher.ru/forum/showthread.php?t=79864 и больше так не делайте.
__________________
(и)Нильс.ru | Плагины для FlashDevelop

Старый 25.07.2006, 10:30
~~~ вне форума Посмотреть профиль Отправить личное сообщение для ~~~ Посетить домашнюю страницу ~~~ Найти все сообщения от ~~~
  № 5  
Ответить с цитированием
~~~
 
Аватар для ~~~

блогер
Регистрация: Nov 2003
Адрес: 117593, Россия, Москва
Сообщений: 211
Записей в блоге: 2
Отправить сообщение для ~~~ с помощью ICQ Отправить сообщение для ~~~ с помощью AIM Отправить сообщение для ~~~ с помощью Yahoo Отправить сообщение для ~~~ с помощью Skype™
Thumbs up OK

Цитата:
Сообщение от iNils
~~~, прочтите пункт 3 http://www.flasher.ru/forum/showthread.php?t=79864 и больше так не делайте.
Прошу прощения, Больше не повторится.

To silin: Спасибо. Мысль хорошая. Как это я после трёх суток работы не додумался . Реально Большое Спасибо!
__________________
WebLog:http://flashimp.ru
IDE: http://Visuvio.com

Старый 25.07.2006, 15:09
werdn вне форума Посмотреть профиль Отправить личное сообщение для werdn Найти все сообщения от werdn
  № 6  
Ответить с цитированием
werdn
 
Аватар для werdn

Регистрация: Mar 2006
Сообщений: 72
Отправить сообщение для werdn с помощью ICQ
По пути вопрос: тело функции - заранее определенный код или там может быть в виде текста ActionScript ? Извините, если вопрос показался глупым.

Старый 25.07.2006, 16:12
silin вне форума Посмотреть профиль Посетить домашнюю страницу silin Найти все сообщения от silin
  № 7  
Ответить с цитированием
silin
 
Аватар для silin

блогер
Регистрация: Mar 2003
Адрес: Моск. обл.
Сообщений: 5,269
Записей в блоге: 6
там может быть что угодно, в том числе и кусок "текста ActionScript", но и воспринят он будет как строка..
дальше можно попробовать извратится пропарсить ее и с помощью eval, call, this[] или еще чего заставить плеер выполнить ..
только оно тебе надо?..

Старый 25.07.2006, 16:15
werdn вне форума Посмотреть профиль Отправить личное сообщение для werdn Найти все сообщения от werdn
  № 8  
Ответить с цитированием
werdn
 
Аватар для werdn

Регистрация: Mar 2006
Сообщений: 72
Отправить сообщение для werdn с помощью ICQ
Число для интереса. Правильно я понял, что вся та котовасия, ранее расписанная была для обеспечения большей скорости работы?

Старый 25.07.2006, 16:26
silin вне форума Посмотреть профиль Посетить домашнюю страницу silin Найти все сообщения от silin
  № 9  
Ответить с цитированием
silin
 
Аватар для silin

блогер
Регистрация: Mar 2003
Адрес: Моск. обл.
Сообщений: 5,269
Записей в блоге: 6
это вопрос к автору: какие резоны городить этот огород
я, если честно, их не вижу..

Старый 25.07.2006, 20:49
~~~ вне форума Посмотреть профиль Отправить личное сообщение для ~~~ Посетить домашнюю страницу ~~~ Найти все сообщения от ~~~
  № 10  
Ответить с цитированием
~~~
 
Аватар для ~~~

блогер
Регистрация: Nov 2003
Адрес: 117593, Россия, Москва
Сообщений: 211
Записей в блоге: 2
Отправить сообщение для ~~~ с помощью ICQ Отправить сообщение для ~~~ с помощью AIM Отправить сообщение для ~~~ с помощью Yahoo Отправить сообщение для ~~~ с помощью Skype™
Цитата:
Сообщение от silin
это вопрос к автору: какие резоны городить этот огород
я, если честно, их не вижу..
Всё ЭТО пишется воимя Великой Модульности програмного продукта.
А этот конкретный код =
Цикл объявления callback-функций для пунктов меню, таким же макаром генерируемых из полученой xml.
Далее строки этого xml будут получаться с сервака.
__________________
WebLog:http://flashimp.ru
IDE: http://Visuvio.com

Создать новую тему Ответ Часовой пояс GMT +4, время: 16:07.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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