|
|
|||||
видимость переменных в классе
при выполнении метода не видны переменные:
|
|
|||||
...
модератор форума
Регистрация: Sep 2006
Адрес: Minsk
Сообщений: 4,286
|
Delegate используйте
|
|
|||||
используя хелп и метод подбора получилось "увидеть" переменые.
только eventObj не передаётся import mx.utils.Delegate;
class my extends MovieClip{
var b = "done";
var btn:Button;
//var dat;
function my(){
trace("конструктор: " + b)
btn.onPress = Delegate.create(this, func);
}
function func(eventObj:Object){
trace(eventObj.target + ": " + eventObj.type);
trace("метод: " + b);
trace(btn._x)
}
}
|
|
|||||
...
модератор форума
Регистрация: Sep 2006
Адрес: Minsk
Сообщений: 4,286
|
Если дописать пару строчек в Delegate, то можно параметры передавать
class MyDelegate { static function create(obj:Object, func:Function):Function { var f = function () { var target = arguments.callee.target; var func = arguments.callee.func; var arg = arguments.callee.arg; return func.apply(target, arg); }; f.arg = arguments.slice(2); f.target = obj; f.func = func; return f; } } class my extends MovieClip{ var b = "done"; var btn:Button; //var dat; function my(){ trace("конструктор: " + b) btn.onPress = MyDelegate.create(this, func, {type:"Lyayaya", target: this}); } function func(eventObj:Object){ trace(eventObj.target + ": " + eventObj.type); trace("метод: " + b); trace(btn._x) } } |
|
|||||
какие полезные штуки оказывается .callee и .apply
Спасибо, суть делегэйта я понял. Единственное место, которое я не могу понять это по отношению к функции. попробовал сделать так: class My_Delegate { static function create(target:Object, func:Function):Function { return function(){ func.apply(target, arguments.slice(2)) }; } } up Разобрался... функция статичная, надо было сохранить параметры просто сделал так и вроде работает: class My_Delegate { static function create(target:Object, func:Function):Function { var t = target; var f = func; var a = arguments.slice(2); var back = function(){ f.apply(t, a) }; return back; } } class my extends MovieClip{ var b = "done"; var btn:Button; function my(){ trace("конструктор: " + b) btn.onPress = My_Delegate.create(this, func, btn); } function func(caller){ trace(caller); trace("метод: " + b); caller._x+=10; } } Последний раз редактировалось Mnilionic; 05.11.2007 в 02:54. |
|
|||||
...
модератор форума
Регистрация: Sep 2006
Адрес: Minsk
Сообщений: 4,286
|
Цитата:
имхо более правильно было бы значения локальных переменных и ссылку на массив параметров переписать в функцию, которую будет возвращать create. |
|
|||||
а почему если на параметр обращаться по имени, а не через массив аргументов, тоне работает?
class My_Delegate { static function create(target:Object, func:Function, evtobj:MovieClip):Function { var f = function () { var target = arguments.callee.target; var func = arguments.callee.func; var arg = arguments.callee.arg; trace("видна ведь: " + arg); return func.apply(target, arg); }; f.target = target; f.func = func; f.arg = evtobj; return f; } } |
|
|||||
...
модератор форума
Регистрация: Sep 2006
Адрес: Minsk
Сообщений: 4,286
|
|
|
|||||
Регистрация: May 2003
Адрес: Tallinn
Сообщений: 3,181
|
import mx.utils.Delegate;
class Anton{
private var target:MovieClip;
public function Anton(target:MovieClip){
this.target = target;
this.target.onEnterFrame = Delegate.create(this, function(){
myFunc(target.param1, target.param2, target.param3);
});
}
private function myFunc(p1:Number, p2:Number, p3:Number){
trace(arguments);
}
}
|
|
|||||
сглупил... стыдно.
спасибо. |
Часовой пояс GMT +4, время: 10:54. |
|
« Предыдущая тема | Следующая тема » |
|
|