Я передаю функцию из файла JavaScript в код Java. Функция JavaScript выглядит так:
entity.handler = function(arg1, arg2) {
//do something
};
В коде Java класс реализует интерфейс Scriptable
. И когда я вызываю JavaScript, на самом деле в Java вызывается следующий метод:
Scriptable.put(java.lang.String s, org.mozilla.javascript.Scriptable scriptable, java.lang.Object o)
где для моего случая:
с = 'обработчик';
scriptable - объект, тип которого com.beanexplorer.enterprise.operations.js.ScriptableEntity
o - на самом деле является функцией, ее тип org.mozilla.javascript.gen.c15
, ( o instanceof Scriptable )
возвращает true
в отладчике.
В реализации метода Scriptable.put()
я хочу делегировать действие объекту «o»:
SomeClass.invoke( new SomeListener(){
@override
public void someAction(int arg1, float arg2) {
//here I need to delegate to the 'o' object.
//do something looked like:
o.call(arg1, arg2); // have no idea how to do it, if it's possible.
}
}
Как мне это сделать? Я не могу найти ни одного примера, необходимого для моего случая.
Спасибо.
РЕДАКТИРОВАТЬ, решение: Actully o - может быть переведено в Function. В итоге помогло следующее решение:
@Override
put(java.lang.String s, org.mozilla.javascript.Scriptable scriptable, java.lang.Object o) {
....
final Function f = ( Function )o;
final SomeInterface obj = new ...;
obj.someJavaMethod( Object someParams, new SomeJavaListener() {
@Override
public void use(Object par1, Object par2) throws Exception {
Context ctx = Context.getCurrentContext();
Scriptable rec = new SomeJavaScriptableWrapperForObject( par1);
f.call( ctx, scriptable, scriptable, new Object[] { rec, par2 } );
}
});
Host system implementors may find it easier to extend the ScriptableObject class rather than implementing Scriptable when writing host objects.
Я бы попробовал... - person ppeterka   schedule 13.03.2013entity.handler
, который должен быть функцией с арностью 2. Это все, что вам нужно? - person Raffaele   schedule 13.03.2013