![]() |
|
||||||||||
|
|||||
|
при выполнении метода не видны переменные:
|
|
|||||
|
...
модератор форума
Регистрация: 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,182
|
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, время: 08:06. |
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | |
| Опции просмотра | |
|
|