2012-01-24 11 views
2

gwtから任意のjs関数を呼び出したいと思います。関数名はfunctionname変数の中にあります。このような何か:GWTのJSNI動的関数リファレンス

private static native String execute(String functionName, JavaScriptObject data) /*-{ 
    return $wnd.functionName(data); 
}-*/; 

私はこのような何かが可能かもしれないことを前提としていますが、どのように私の任意のfunctionname機能を表現するFN変数を作成します。

private static native String execute(JavaScriptObject fn, JavaScriptObject data) /*-{ 
    return fn(data); 
}-*/; 

答えて

7

名前で機能を呼び出すために必要がある場合は、あなたがこのような何かする必要があります:あなたはこのようにJSNIを使用する必要があります関数への参照を取得するには

private static native String execute(String functionName,JavaScriptObject data)/*-{ 
    $wnd[functionName](data); 

}-*/; 

を:

private static native JavaScriptObject getFunction(String functionName)/*-{ 
    return $wnd[functionName]; 

}-*/; 
+0

com.google.gwt.core.client.JavaScriptException:(TypeError):オブジェクト[オブジェクトDOMWindow]のプロパティ 'my.function.name'が関数ではありません \t、com.google.gwt.dev.shell.BrowserChannelServer .invokeJavasc ript(BrowserChannelServer.java:248) 提案がありますか? – Matija

+0

Btw、ダイレクトコールが機能するので、js関数が存在します。 private static native String execute(String functionName、JavaScriptObject data)/ * - { return $ wnd.my.function.name(data); } - * /; – Matija

+1

無効なパスを使用しています。関数名はドットを含んではいけません。それ以外の場合は、$ wnd ["my"] ["function"] ["name"]();のようなものを使用する必要があります。 – jusio

関連する問題