2013-01-31 26 views
5

Làm cách nào để định dạng các dấu tích trong jqplot của tôi để xử lý thay đổi giữa, và. và "" tùy thuộc vào khu vực tôi đang ở.JQPlot - định dạng ve dựa trên khu vực

Ví dụ:

  • châu Âu - 1.000,00
  • Mỹ - 1,000.00
  • khác 1 000,00

My dụ jqplot khởi trông giống như ....

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' 
       } 
      }, 
      } 
     }); 

Tôi nhìn thông qua tài liệu nhưng tôi không chắc chắn những từ khóa tôi cần tìm ... bất kỳ trợ giúp nào sẽ được đánh giá cao

Trả lời

12

Dựa trên this, bạn có thể sử dụng một chuỗi định dạng như sau:

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

Đó là chuỗi định dạng, cùng với các giá trị, kết thúc như các đối số vào một cuộc gọi đến $.jqplot.sprintf. Sau đó bạn có thể thiết lập các thiết bị tách như sau:

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

Vì vậy, mã này:

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

Sẽ tạo ra này:

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

Tuy nhiên, xem như thế nào một châu Âu là giống như Mỹ? Khi các thiết lập dấu phân cách đó được thay đổi, nó dẫn đến việc thay thế chuỗi, do đó tại sao kết quả của châu Âu lại giống như vậy: thay thế dấu phẩy bằng dấu chấm và sau đó dấu chấm bằng dấu phẩy sẽ trả về chuỗi gốc.

Do đó, bạn sẽ cần phải cung cấp một phương pháp định dạng tùy chỉnh đánh dấu để bạn có thể áp dụng những cài đặt trên-the-fly và sau đó làm một chuỗi thay thế:

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

Điều này có nghĩa bạn cũng sẽ cần một số cơ chế thuận tiện để thiết lập cả ngôn ngữ của người dùng và các ký tự phân cách chính xác để sử dụng. Tôi lưu và khôi phục các ký tự thousandsSeparatordecimalMark theo cách này chỉ để đảm bảo rằng đặt chúng theo cách này không gây ra các vấn đề vô ý ở nơi khác.

Cũng lưu ý rằng giải pháp của tôi giả định rằng các ký tự #_ sẽ không nằm trong giá trị bạn muốn định dạng. Nếu điều này không đúng, hãy sửa đổi các dấu phân cách theo phương pháp FormatTick thành một cái gì đó phù hợp hơn.

+0

Tìm hiểu rằng tôi chỉ có thể đặt $ .jqplot.sprintf.thousandsSeparator và $ .jqplot.sprintf.decimalMark đã giải quyết nó cho trang chỉ có tiếng Đức của tôi. Cảm ơn rất nhiều! – alfonx

Các vấn đề liên quan