2013-04-24 87 views
0

我在寫一個GWT應用程序並使用highcharts。一些功能在Java中不可實現,但是在JavaScript中。我被給了一個如何實現我可以使用的東西的例子,但是我不知道如何包含在我的代碼中。GWT Highcharts使用JSNI調用Javascript

我的代碼包含變量聲明爲Chart graph;

我想這個答案Add tooltip to legend in highcharts when hovering

chart: { 
     type: 'column', 
     events: { 
      load: function() { 
       var chart = this, 
        legend = chart.legend; 

       for (var i = 0, len = legend.allItems.length; i < len; i++) { 
        var item = legend.allItems[i].legendItem; 
        item.on('mouseover', function (e) { 
         //show custom tooltip here 
         console.log("mouseover"); 
        }).on('mouseout', function (e) { 
         //hide tooltip 
         console.log("mouseout"); 
        }); 
       } 

      } 
     } 

    }, 

如何想補充一點能力,我的代碼實現事件的節目。我試着用如下所示http://www.moxiegroup.com/moxieapps/gwt-highcharts/apidocs/index.html但我想不出一個辦法做到這一點的chart.setOption(/圖表/事件/負載」,對象o)。

我認爲它會通過創建一個方法

完成
private native void foo(JavaScriptObject c)/*-{ 


}-*/; 

OR

private native void foo(Chart c)/*-{ 


}-*/; 

,但我不知道如何連接兩個任何幫助表示讚賞

+0

你是什麼意思由「使用高壓圖」?你是否使用moxiegroup的GWT包裝版本?它只是作爲一個JS資源被包含在內,並且你只是自己包裝了必要的調用?是完全暴露在java中的項目中的高級API嗎? – 2013-04-25 09:29:32

+0

是的,我使用moxiegroup的GWT包裝版本。據我的理解是,highcharts API完全暴露在java中,但有一些內容我不想添加。 – bubbles 2013-04-25 17:56:56

回答

1

首先創建這樣一個本地方法。!

private native void foo(JavaScriptObject chart)/*-{ 
    var legend = chart.legend; 

    for (var i = 0, len = legend.allItems.length; i < len; i++) { 
     var item = legend.allItems[i].legendItem; 

     item.on('mouseover', function (e) { 
      //show custom tooltip here 
      console.log("mouseover"); 
     }).on('mouseout', function (e) { 
      //hide tooltip 
      console.log("mouseout"); 
     }); 
    } 
}-*/; 

然後像這樣調用這個方法連同setLoadEventHandler();

chart.setLoadEventHandler(new ChartLoadEventHandler() { 

     @Override 
     public boolean onLoad(ChartLoadEvent chartLoadEvent) { 
      foo(chart.getNativeChart()); 

      return true; 
     } 
    }); 

這就是全部!希望這會幫助你。