this.item.area.onRelease=Delegate.create(this,this.onItemRelease);
Объектов item может быть много. Необходимо в onItemRelease как-то добраться до area, которое вызвало событие.
Неполучилось.
Есть конечно способы модифицирующие класс Delegate, но хотелось бы без этого.
* * *
Обсудили этот вопрос. Наиболее изящным мне показался следующий метод:
Для Area определяем:
var onReleaseWithThis:Function;
function onRelease() {
onReleaseWithThis(this);
}
Теперь для главного класса:
this.item.area.onReleaseWithThis=Delegate.create(this,this.onItemRelease);
function onItemRelease(who) {
trace(who);
}
* * *
В итоге, склонился к методу перекрытия класса Delegate своим, с передачей параметров. Использовать удобно, подключать удобно. Разве что неудобно таскать из проекта в проект.
Заметил правда один хак, который сам непонимаю почему работает. При передаче дополнительных параметров при create, они находятся в области видимости create, но затем, почему-то легко доступны в самой вызываемой функции уже позже, при работе программы. А нет ли такой вероятности, что эти параметры удалятся тем же Garbage Collector ом? Тем не менее метод работает, и я его буду использовать. Благо в AS3 такой ерундой заниматься уже нет необходимости.
Комментариев нет:
Отправить комментарий