2015-06-15 3 views
5

Ich habe ein Problem mit Highcharts-Bibliotheken. Ich habe verschiedene Diagramme mit dem in Jaspersoft Studio verfügbaren Werkzeug Benutzerdefinierte Visualisierung erstellt. Sie verwenden nicht die gleiche Bibliothek, z.B. Ich habe ein Bubble Map-Diagramm, das Highmaps.js verwendet, und ein Stock-Diagramm, das Highstock.js verwendet.Library-Duplikationsproblem mit Highcharts in Jaspersoft Studio

Jeder Bericht scheint sehr gut zu funktionieren, wenn ich ihn in Jaspersoft Server visualisiere. Aber wenn ich ein Armaturenbrett mit zwei differents Berichte zu erstellen, habe ich diesen Fehler:

Uncaught Highcharts error #16: www.highcharts.com/errors/16 Highcharts already defined in the page

Dieser Fehler tritt zum zweiten Mal Highcharts oder Highstock wird in der gleichen Seite geladen, so dass die Highcharts Namespace ist bereits definiert. Beachten Sie, dass der Highcharts.Chart-Konstruktor und alle Features von Highcharts in Highstock enthalten sind. Wenn Sie also Chart und StockChart in Kombination verwenden, müssen Sie nur die Datei highstock.js laden.

Ich verstehe, dass es einen Konflikt zwischen Highmaps.js und Highstock.js gibt, da sie Funktionen gemeinsam haben. Aber ich weiß nicht, wie ich es vermeiden kann: Ich brauche Features von Highmaps und Highstocks. Hier ist, wie ich diese Bibliotheken sind meine Berichte zu definieren:

-1st Chart (Stock Chart)

define(['jquery', 'highstock'], function(hs_test) { 
    return function(instanceData) { 
    /*...*/ 
    } 
}); 

-2nd Diagramm (Blasen-Karte Diagramm)

define(['jquery','highmaps','data','world','exporting'], function (mapbubble) { 
    return function(instanceData) { 
    /*...*/ 
    } 
}); 

Und hier ist, wie ich schreibe meine build.js Dateien:

({ 
    optimize: 'none', 
    baseUrl: '', 
    paths: { 
    jquery: 'jquery', 
    highstock: 'highstock', 
    exporting: 'exporting', 
    'highstock_test': 'highstock_test' 
    }, 
    shim: { 
    'highstock': { 
     deps: ["jquery"], 
     exports: 'Highcharts' 
    } 
    }, 

    name: "highstock_test", 
    out: "highstock_test.min.js" 
}) 

verwendete ich das Highstock Beispiel hier, aber ich habe genau das gleiche mit dem Bericht Highmaps verwenden. Ich hoffe, ich bin nicht der Erste, der dieses Problem hat, und wenn ja, kann mir jemand eine Methode vorschlagen, um diese Bibliotheksduplikation zu vermeiden?

EDIT

Wie bereits angedeutet, habe ich versucht, highmaps.js von highstock.js + map.js wie folgt ersetzt:

define(['jquery','highstock','map','data','world','exporting'], function ($, Highcharts) { 
return function (instanceData) { 
/*...*/ 
} 
}) 

ich jetzt einen Fehler haben 17:

The requested series type does not exist

This error happens when you are setting chart.type or series.type to a series type that isn't defined in Highcharts. A typical reason may be that your are missing the extension file where the series type is defined, for example in order to run an arearange series you need to load the highcharts-more.js file.

Jetzt fehlt etwas von Highmaps.js und ich weiß nicht was. Ich freue mich auf Vorschläge.

UPDATE

ich diesen Fehler 17 Highcharts-more.js durch, einschließlich, aber ich habe immer noch diesen Fehler 16 während des Laufens zwei Karten vermeiden.

Hier sind die Fehler, die ich habe, wenn ich meine beiden Berichte in der gleichen Armaturenbrett ausführen:

Javascript console

Antwort

1

Schließlich habe ich das Problem durch die Zusammenlegung aller Highcharts Dateien löste ich brauchte, um meine Blase Karte Diagramm zu zeichnen, wie von @ PawełFus vorgeschlagen, und umschloss den Code mit einer Bedingung auf Highcharts Variable:

if (typeof Highcharts == 'undefined') { 

/* Optimized merge files containing both highstock.js, highcharts-more.js and map.js */ 

} 

Dann Ich verwende diese Datei für alle Highcharts-Diagramme, die ich erstellen möchte.

Das funktioniert super. Danke allen und besonders @ PawełFus.

2

auf diesen question meinen Kommentar anzeigen. Sie müssen nur die "Basis" Highstock laden.js und dann alle anderen Module möchten Sie danach laden:

<script src="code.highcharts.com/stock/highstock.js"></script> 
<script src="code.highcharts.com/stock/modules/map.js"></script> 
<script src="code.highcharts.com/stock/modules/ANOTHERMODULEYOUNEED.js"></script> 

Je nachdem, was Sie brauchen Sie möglicherweise laden konnte nur highmaps.js wie es auch eine Reihe von anderen Diagrammtypen enthält.

+1

Sieht aus wie OP fragt im Zusammenhang mit RequireJS speziell. – kryger

+0

Ladeauftrag würde immer noch gelten. – wergeld

+0

Ja, wie von @kryger gesagt Ich kann RequireJS nur verwenden, um Skripte einzuschließen. Ich habe viele verschiedene Kombinationen ausprobiert, aber niemand scheint zu arbeiten. Ich denke, der einzige Weg ist, eine Datei zu finden, die ALLE Highcharts-Funktionen enthält. Was denken Sie ? – Kabulan0lak

Verwandte Themen