【发布时间】:2013-02-05 16:20:11
【问题描述】:
如何在 GWT 中从 JSNI 返回一个 JavaScript 函数?我尝试了以下方式:
/* JSNI method returning a js-function */
public static native JavaScriptObject native_getFunction() /*-{
return function(a,b){
//do some stuff with a,b
}
}-*/;
将函数存储在变量中
/* outside from GWT: store the function in a variable */
JavaScriptObject myFunction = native_getFunction();
之后使用该函数会产生以下错误消息:
(TypeError): object is not a function
有人知道如何解决这个问题吗?
【问题讨论】:
-
你为什么要这么做???
-
返回的函数是一个 d3.js 转换函数,在其他几个 JSNI 方法中用于转换一些数据。为了避免冗余并动态更改转换,我想将其存储在一个变量中。
-
我不明白为什么你不能简单地从其他 JSNI 方法调用这个 JS 函数,就像你在文档中调用任何 JS 一样,而不将其存储在变量中。
-
(1) 为什么不直接调用该函数:正如我所说,它是来自 d3.js 的转换函数,但带有我编写的自定义参数。因此,每当我需要任何 JSNI 方法中的转换函数时,我都必须再次编写转换函数(重复代码,可维护性)。 (2) 因此,我只定义了一次函数,将其存储在一个变量中,然后可以将该函数作为参数提供给任何需要转换的 JSNI 方法。
-
您可以定义您的 JS 函数,将其注入到文档中(使用 GWT ScriptInjector),并直接从任何 JSNI 方法调用它。但我喜欢 Simon-Pierre 的解决方案。
标签: javascript gwt d3.js