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