![]() |
передача параметра функции, при нажатии на мувик
Здравствуйте!
Как правильно передать параметр из Код:
onpress=function(){}пишу: Код:
for (var i=0; i<=30; i++){//циклКод:
public function Presscode(perem){а вообще как можно Код:
-//-.onPress=function(){помогите плизз. |
Код:
for (var i=0; i<=30; i++){//цикл |
не хочет оно вызывать вообще никакие функции изнутри
Код:
onPress=function(){ отсюда ничего не вызывает :( } |
надо копать в сторону mx.utils.Delegate
|
спасибо :) буду копать =)
|
Цитата:
Код:
class ru.inils.Delegate extends Object { |
класс, шикарно
|
Ага, вот Proxy:
Код:
class ascb.util.Proxy { |
всего 2 строки дописал, а сколько пользы :~)
|
__etc, тоже куул
|
спасибо :) попробую применить..
|
как можно поюзать класс Proxy в моем случае?
|
Точно также, как и Delegate — по функциональности они одинаковы.
|
так же, за исключением способа передачи аргументов:
Класс от iNils-а: Код:
import ru.inils.Delegate;Код:
import ascb.util.Proxy;Код:
_level0 myMc:_level0.mc pram2:123мне больше нравится без :~) |
точно такого результат можно добиться не импортируя никаких классов,
однако, не смотря на то что кода не стало больше, а от импорта удалось избавиться, этот способ считается менее правильным: Код:
var mc:MovieClip = this.createEmptyMovieClip('mc', 1); |
artcraft, это костылки в виде дополнительной ссылки, которая, тем не менее, не решает проблем с областью видимостью.
з.Ы. Proxy не мой, автор неизвестен, тем не менее, ему большое спасибо. |
автора зовут Joey Lott
вот его сайт http://www.person13.com/ а тут вся ascb библиотека http://www.person13.com/ascblibrary/ |
Цитата:
мне казалось, что в результате и так и так функция doItOnPress вызывается таким образом что this указывает на _level0 ... в чём конкретно проблема области видимостьи? можно пример? |
artcraft, ммм, я про твой неправильный способ говорил :)
|
И я про него - он точно так функцию вызывает
|
и потом, это не мой метод... это не я изобрёл так делать... :~)
|
Ну раз про него, то опять же, переместить назначение onPress в другое место нельзя, ссылку убить нельзя и т.п. В общем — не вариант.
|
почему нельзя?
Код:
delete(mc.onPress); |
Цитата:
Код:
function createDelegate (obj:Object, func:Function, arg:Array):Function { |
artcraft, я имел ввиду, что нельзя убивать вспомгательную ссылку, а вместе с этим и перенести всю функцию куда-нибудь ещё…
|
:~)
ну это и коню понятно что можно всё в один столбик написать без всяких импортов.... не в этом вопрос - вопрос: в чём конкретно проблема области видимости, "кривого" cпособа? до меня не доходит - чем он хуже? |
Цитата:
что такое вспомогательная ссылка? как это сделать правильным способом? |
а... дошло (плохо башка варит к ночи) вспомогательня ссылка это:
Код:
var self:Object = this; |
Да никак — юзать Delegate/Proxy и не мучаться.
Проблема «кривого» способа в том, что внутри вспомгательной функции this ссылается вовсе не на то, что нам нужно, поэтому и создается лишний мусор, вроде self. |
и куда её еще переносить?
для привязывания функции любым из методов нужна ссылка на функцию и ссылка на то что будет для неё this-ом Код:
var target:Object = this;Код:
function createDelegate (obj:Object, func:Function, arg:Array):Function {при "плохом" методе мы имеем болше символов и 2-е строки да согласен "правилный" метод нагляднее, но реально кода больше см. коммент#24 (хотя, безусловно нас это не волнует т.к. это менее важно чем читаемость кода) то что находится внутри вспомогательной функции не важно - туда ничего добавлять и не надо... потому она и вспомогательная. "правильный" способ - это ведь тоже вспомогательная функция, там ведь никто не стремится ничего менять... пока не вижу критических различий :umnik2: только чистоплюйство... |
согласитесь, "неправильный" метод в итоге компактнее
|
Код:
function createDelegate (obj:Object, func:Function, arg:Array):Function {вспомогатеьная функция вызов прикрепляемой функции |
Эхх... жаль кое-чего в AS 3 нету
|
почему жаль?
нет там c этим гемора и хорошо - радоваться надо :~) |
Цитата:
|
artcraft, в Proxy нету ничего вспомогательного. Дело не в краткости кода.
Дело в инкапсуляции — ты написал одну строку и всё, не забивая себе голову лишними рассуждениями на тему области видимости и как её не потерять. Более того, это более правильно с точки зрения ООП — метод должен обрабатываться в конкретном экземпляре класса, а не обрабатываться где-то в его потомках. Попробуй написать такую конструкцию в FDT — повергнешь его в шок. |
огромное всем спасибо :) проблема решена.
|
| Часовой пояс GMT +4, время: 18:47. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.