![]() |
|
||||||||||
|
|||||
|
Регистрация: Jul 2007
Сообщений: 79
|
Здравствуйте,
В проекте используется Extension (есть возможность изменить его код). Есть ли возможность добавить в проекте callback на вызов какой-то функции из экстеншена, аналогично ExternalInterface.addCallback на вызов из JS? Заранее благодарен. |
|
|||||
|
Регистрация: Jul 2007
Сообщений: 79
|
Смысл в том, чтобы пользователь, который будет использовать этот экстеншен, мог задать колбеки на функции не меняя ничего.
|
|
|||||
|
Modus ponens
|
Все равно не понятно =/ Если функция есть - ее можно вызвать, если ее нет - ее можно создать и вызвать, только смысла во втором случае я не вижу...
ЗЫ. В JS колбек регистрируется на своего рода "прокси" объекте до того, как флешка инициализируется, чтобы избежать ситуаций, когда метод, которуй будет вызван окажется неопределенным (JS ведь не может заглянуть во внутрь флешки и узнать, а есть ли там такая функция). В вашем случае прокси не нужен... ну как бы смысла в нем нет...
__________________
Hell is the possibility of sanity Последний раз редактировалось wvxvw; 20.08.2008 в 21:39. |
|
|||||
|
Регистрация: Jul 2007
Сообщений: 79
|
А, вообще, есть такая возможность?
|
|
|||||
|
Modus ponens
|
package org.gfx.framework.utils
{
import flash.utils.Proxy;
import flash.utils.flash_proxy;
/**
* ProxyCallBack class.
* @author wvxvw
*/
public dynamic class ProxyCallBack extends Proxy
{
private var _callbacks:Object = {};
public function ProxyCallBack()
{
super();
}
public function addCallBack(functionName:String, closure:Function, scope:Object):void
{
_callbacks[functionName] = new Delegate(closure, scope);
}
flash_proxy override function callProperty(name:*, ...rest):*
{
for (var s:String in _callbacks)
{
if (String(name) == s)
{
return (_callbacks[s] as Delegate).createDelegate(rest);
}
}
}
}
}
internal final class Delegate
{
private var _func:Function;
private var _scope:Object;
public function Delegate(func:Function, scope:Object)
{
_func = func;
_scope = scope;
}
public function createDelegate(args:Array = null):*
{
return _func.apply(_scope, args);
}
}
package
{
import flash.display.Sprite;
import org.gfx.framework.utils.ProxyCallBack;
public class Main extends Sprite
{
public var proxy:ProxyCallBack;
public function Main():void
{
super();
proxy = new ProxyCallBack();
proxy.addCallBack("someFunc", testProxy, this);
proxy.someFunc("foo");
}
public function testProxy(s:String):void
{
trace(s);
}
}
}
__________________
Hell is the possibility of sanity |
![]() |
![]() |
Часовой пояс GMT +4, время: 23:13. |
|
|
« Предыдущая тема | Следующая тема » |
|
|