2015-06-15 9 views
5

Ho un problema con le librerie Highcharts. Ho creato vari grafici con lo strumento di visualizzazione personalizzata disponibile in Jaspersoft Studio. Non usano tutta la stessa libreria, ad es. Dispongo di un grafico Mappa a bolle che utilizza Highmaps.js e un grafico azionario che utilizza Highstock.js.Problema di duplicazione della libreria utilizzando Highcharts in Jaspersoft Studio

Ogni report sembra funzionare molto bene quando lo visualizzo in Jaspersoft Server. Ma quando ho creare un dashboard contenente due relazioni differenti, ho questo errore:

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

Questo errore si verifica il secondo Highcharts di tempo o Highstock viene caricato nella stessa pagina, in modo che il namespace Highcharts è già definita. Tenere presente che il costruttore di Highcharts.Chart e tutte le funzionalità di Highcharts sono inclusi in Highstock, quindi se si esegue Chart e StockChart in combinazione, è sufficiente caricare il file highstock.js.

Capisco che c'è un conflitto tra Highmaps.js e Highstock.js in quanto hanno caratteristiche in comune. Ma non so come evitarlo: ho bisogno di funzionalità sia da Highmaps che da Highstocks. Ecco come includo queste librerie per definire i miei rapporti:

grafico -1 ° (della tabella)

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

grafico -2nd (mappa grafico a bolle)

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

Ed ecco come lo scrivere il mio build.js file:

({ 
    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" 
}) 

ho usato l'esempio Highstock qui, ma mi fanno esattamente la stessa cosa con la relazione usando Highmaps. Spero di non essere il primo ad avere questo problema e, in tal caso, qualcuno può suggerirmi un metodo per evitare questa duplicazione della libreria?

EDIT

Come suggerito, ho provato a sostituire highmaps.js da highstock.js + map.js come seguono:

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

ora ho un errore 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.

Ora manca qualcosa da Highmaps.js e non so cosa. In attesa di suggerimenti.

UPDATE

posso evitare questo errore 17 includendo Highcharts-more.js, ma ho ancora questo errore 16 durante l'esecuzione di due grafici.

Qui ci sono gli errori che ho quando ho eseguito i miei due rapporti nello stesso cruscotto:

Javascript console

risposta

1

Infine, ho risolto il problema con la fusione di tutti i file Highcharts avevo bisogno di attirare la mia bolla carta grafico, come suggerito da @ PawełFus, e chiuso il codice con una condizione sulla variabile Highcharts:

if (typeof Highcharts == 'undefined') { 

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

} 

Poi Io uso questo file per tutti i grafici Highcharts che voglio costruire.

Questo funziona benissimo. Grazie a tutti, in particolare a PawełFus.

2

Guarda il mio commento su questo question. Devi caricare solo la carena "base".js e poi tutti gli altri moduli che si desidera caricare dopo che:

<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> 

A seconda di ciò che è necessario si potrebbe basta caricare highmaps.js in quanto contiene anche un sacco di altri tipi di grafici.

+1

Sembra che OP si stia chiedendo nel contesto di RequireJS in particolare. – kryger

+0

L'ordine di caricamento verrebbe comunque applicato. – wergeld

+0

Sì, come detto da @kryger, posso usare solo RequireJS per includere gli script. Ho provato molte combinazioni diverse, ma nessuno sembra funzionare. Penso che l'unico modo sia trovare un file contenente TUTTE le caratteristiche dei grafici ad alta risoluzione. Cosa ne pensi ? – Kabulan0lak

Problemi correlati