2013-01-31 13 views
5

Come posso formattare i segni di graduazione nel mio jqplot per gestire la modifica tra, e. e "" a seconda della regione in cui mi trovo.JQPlot - tick di formattazione in base alla regione

Ad esempio.

  • europea - 1.000,00
  • US - 1.000,00
  • Altro 1 000,00

Il mio esempio di inizializzazione jqplot sembra ....

plot3 = $.jqplot('saturationChart', lineArray, 
     { 
      title:m_Language.saturationChartName, 
      series:lineColor, 
      legend:{show:true, location:'se'}, 
      // You can specify options for all axes on the plot at once with 
      // the axesDefaults object. Here, we're using a canvas renderer 
      // to draw the axis label which allows rotated text. 
      axes:{ 
      xaxis:{ 
//   label:'Minutes', 
       renderer: $.jqplot.LogAxisRenderer, 
       tickDistribution:'power', 
       labelRenderer: $.jqplot.CanvasAxisLabelRenderer, 
       labelOptions: { 
       //fontSize: '12pt' 
       }, 
      }, 
      yaxis:{ 
//   label:'Megaohms', 
       renderer: $.jqplot.LogAxisRenderer, 
       tickDistribution:'power', 
       labelRenderer: $.jqplot.CanvasAxisLabelRenderer, 
       labelOptions: { 
       //fontSize: '12pt' 
       } 
      }, 
      } 
     }); 

ho guardato attraverso la documentazione, ma non sono sicuro di quali parole chiave devo cercare ... ogni aiuto sarebbe apprezzato

risposta

12

Sulla base di this, è possibile utilizzare una stringa di formato come la seguente:

yaxis: { 
    tickOptions: { formatString: "%'.2f" }, 
    min : 0 
} 

Quella stringa di formato, insieme al valore, finiscono come argomenti in una chiamata a $.jqplot.sprintf. È quindi possibile impostare i separatori come segue:

$.jqplot.sprintf.thousandsSeparator = ','; 
$.jqplot.sprintf.decimalMark = '.'; 

Quindi questo codice:

var value = 10000; 
$.jqplot.sprintf.thousandsSeparator = '.'; 
$.jqplot.sprintf.decimalMark = ','; 
console.log($.jqplot.sprintf("European %'.2f", value)); 

$.jqplot.sprintf.thousandsSeparator = ' '; 
$.jqplot.sprintf.decimalMark = ','; 
console.log($.jqplot.sprintf("Other %'.2f", value)); 

$.jqplot.sprintf.thousandsSeparator = ','; 
$.jqplot.sprintf.decimalMark = '.'; 
console.log($.jqplot.sprintf("US %'.2f", value)); 

produrrà questo:

European 10,000.00 
Other 10 000,00 
US 10,000.00 

Tuttavia, vedere come quello europeo è lo stesso del NOI? Quando le impostazioni di questi separatori vengono cambiate, ne risulta la sostituzione delle stringhe, da qui il motivo per cui l'europeo finisce come fa: sostituendo le virgole con i punti e quindi i punti con virgole ti restituiscono la stringa originale.

A causa di ciò, si avrebbe bisogno di fornire un metodo di formattazione segno di spunta su misura così da poter applicare tali impostazioni on-the-fly e poi fare una stringa sostituire:

yaxis: { 
    tickOptions: { 
     tickOptions: { formatString: "%'.2f" }, 
     formatter: function(format, value){ 
      return FormatTick(format, value); 
     } 
    } 
} 

.... 

function FormatTick(format, value) { 
    var prevThousandsSeparator = $.jqplot.sprintf.thousandsSeparator; 
    var prevDecimalMark = $.jqplot.sprintf.decimalMark; 

    $.jqplot.sprintf.thousandsSeparator = '#'; 
    $.jqplot.sprintf.decimalMark = '_'; 

    var formattedValue = $.jqplot.sprintf(format, value); 
    formattedValue = formattedValue.replace($.jqplot.sprintf.decimalMark, Language.DecimalMark) 
     .replace($.jqplot.sprintf.thousandsSeparator, Language.ThousandsSeparator); 

    $.jqplot.sprintf.thousandsSeparator = prevThousandsSeparator; 
    $.jqplot.sprintf.decimalMark = prevDecimalMark; 

    return formattedValue; 
} 

Questo significa che sarà anche bisogno di un po ' comodo meccanismo per stabilire sia la localizzazione dell'utente che i caratteri separatori corretti da usare. Salvare e ripristinare i caratteri thousandsSeparator e decimalMark in questo modo solo per garantire che l'impostazione in questo modo non causi problemi involontari altrove.

Si noti inoltre che la mia soluzione presuppone che i caratteri # e _ non si trovino altrimenti nel valore che si desidera formattare. Se non è così, modificare i separatori nel metodo FormatTick in qualcosa di più adatto.

+0

Imparando che posso solo impostare $ .jqplot.sprintf.thousandsSeparator e $ .jqplot.sprintf.decimalMark l'ho risolto per la mia pagina di solo tedesco. Molte grazie! – alfonx

Problemi correlati