![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|
|
|||||
|
Динамическое построение функции (вопрос к реал.знающим 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. Заранее благодарю. С уважением Александр Козловский. Последний раз редактировалось iNils; 24.07.2006 в 20:06. |
|
|||||
|
Прошу прощения за замороченность вопроса, просто я последнее время очень много проф.тех.документации написал...
|
|
|||||
|
как пишешь 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
|
|
|||||
|
Негуру
администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,884
Записей в блоге: 7
|
~~~, прочтите пункт 3 http://www.flasher.ru/forum/showthread.php?t=79864 и больше так не делайте.
|
|
|||||
|
Цитата:
![]() To silin: Спасибо. Мысль хорошая. Как это я после трёх суток работы не додумался . Реально Большое Спасибо! |
|
|||||
|
По пути вопрос: тело функции - заранее определенный код или там может быть в виде текста ActionScript ? Извините, если вопрос показался глупым.
|
|
|||||
|
там может быть что угодно, в том числе и кусок "текста ActionScript", но и воспринят он будет как строка..
дальше можно попробовать извратится пропарсить ее и с помощью eval, call, this[] или еще чего заставить плеер выполнить .. только оно тебе надо?.. |
|
|||||
|
Число для интереса. Правильно я понял, что вся та котовасия, ранее расписанная была для обеспечения большей скорости работы?
|
|
|||||
|
Цитата:
А этот конкретный код = Цикл объявления callback-функций для пунктов меню, таким же макаром генерируемых из полученой xml. Далее строки этого xml будут получаться с сервака. |
![]() |
![]() |
Часовой пояс GMT +4, время: 15:06. |
|
|
« Предыдущая тема | Следующая тема » |
|
|