我目前正在构建一个基于SmartGWT的Web应用程序(使用Portlet布局).所以我有几个"Portlet",它基本上扩展了不同内容的GWT Window.现在我想要一个Portlet来显示Dygraphs.所以我创建了一个RPC服务实现,它返回一个JSON字符串(基于DataTable对象).
因为我无法直接序列化我使用的DataTable对象
String json = JsonRenderer.renderDataTable(data, true, true).toString();
Run Code Online (Sandbox Code Playgroud)
其中"data"的类型为DataTable.
现在,这个String被正确传递到我想要创建Dygraph的客户端.在这个帖子中,有人建议使用
public static native DataTable toDataTable(String json)
/-{ return new $wnd.google.visualization.DataTable(eval("(" + json + ")")); }-/;
Run Code Online (Sandbox Code Playgroud)
如果我在GWT客户端代码中使用它,我会收到错误消息
com.google.gwt.core.client.JavaScriptException: (TypeError): $wnd.google.visualization is undefined
Run Code Online (Sandbox Code Playgroud)
我是否会错过可视化API的"导入"?我在哪里实例化它?
或者是否有另一种方法可以将JSON数据串放入Dygraph?我找不到任何例子......
谢谢你的提示!
我假设您已在模块的XML中包含了visualization.jar和可视化命名空间
<inherits name="com.google.gwt.visualization.Visualization"/>
Run Code Online (Sandbox Code Playgroud)
这将为您提供类.您可能已经这样做了,否则您将遇到编译器错误.
但是,您还必须包含来自google服务器的实际可视化javascript文件(visualization.jar只是一个包装器).这可以通过两种不同的方式完成:
1.)将其包含在主页中:
<script type="text/javascript">
google.load("visualization", "1", {'packages' : ["corechart"] });
</script>
Run Code Online (Sandbox Code Playgroud)
要么
2.)在您需要的地方动态加载它:
VisualizationUtils.loadVisualizationApi(onLoadCallback, MotionChart.PACKAGE);
Run Code Online (Sandbox Code Playgroud)
请参阅http://code.google.com/docreader/#p=gwt-google-apis&s=gwt-google-apis&t=VisualizationGettingStarted
顺便说一句.我已经分叉了Dygraphs项目,并将GWT包装器更改为更像其他可视化包装器.你可以在这里查看:https://github.com/timeu/dygraphs
编辑:我有一个新的GWT包装器用于dygraphs使用GWT 2.8的新JsInterop:https://github.com/timeu/dygraphs-gwt
注意:我更改了dygraphs中的一些行为,并添加了一些上游代码中没有的功能.
| 归档时间: |
|
| 查看次数: |
4231 次 |
| 最近记录: |