使用JSNI在GWT应用程序中使用d3脚本

使用JSNI在GWT应用程序中使用d3脚本,gwt,jsni,d3.js,Gwt,Jsni,D3.js,我正在尝试将d3脚本集成到gwt web应用程序中。但是,我不知道如何从JSNI运行d3。d3代码单独运行良好;我想知道这可能是因为d3代码无法访问div元素? 这就是我所遵循的方法: +在主html文件头中添加“script”标记,以指定d3库 +使用JSNI将以下d3代码放入一个方法中,并在onModuleLoad()中调用该方法。d3代码访问根面板也在使用的主div元素 /*-{ var w = 960, h = 800; var svg = d3.select("#ch

我正在尝试将d3脚本集成到gwt web应用程序中。但是,我不知道如何从JSNI运行d3。d3代码单独运行良好;我想知道这可能是因为d3代码无法访问div元素?
这就是我所遵循的方法:
+在主html文件头中添加“script”标记,以指定d3库
+使用JSNI将以下d3代码放入一个方法中,并在onModuleLoad()中调用该方法。d3代码访问根面板也在使用的主div元素

/*-{

    var w = 960, h = 800;
    var svg = d3.select("#chart2")
        .append("svg:svg")
        .attr("width", w)
        .attr("height", h)
        .append("svg:g")
        .attr("transform", "translate(40, 0)");

        svg.selectAll("circle")
            .data([ 32, 57, 112, 293 ])
            .enter()
            .append("circle")
            .attr("cy", 90)
            .attr("cx", String)
            .attr("r", Math.sqrt);

}-*/; 
我还尝试了另一种方法;我在Java类的HTML元素中添加了另一个div元素,并尝试从d3访问第二个div

在这两种情况下,都没有出现任何情况。你知道怎么用吗?

你知道吗

首先:

  • 您应该使用*.gwt.xml文件
  • 通过$wndthis变量正确引用库的范围

  • 这里不是花园品种JS,您需要遵守JSNI文档中的规则。请参阅关于JSNI库包装的部分。

    除了前面提到的内容,您还可以查看。
    d3.js和protovis具有相似的设计(都是由开发的)


    因此,您可以从protovisGWT包装器中获得许多想法,甚至还可以为d3.js实现GWT包装器。

    我总结了一个如何将d3集成到GWT的简短示例:

    基本上,您可以使用 JSNI并将它们传递到JavaScript方法中 其中包含d3代码:

    很晚的回答…
    但项目可能就是你想要的:


    这是一个围绕着d3.js的GWT包装器@Ehsan请参考这篇文章以获得一个快速、简单的教程。非常感谢您提供的有用信息。我会根据评论和结果更新帖子。非常感谢你的帮助。我会按照评论,并用结果更新帖子。