2011-11-21 128 views
0

我使用dojox.charting.DataSeries从dojo.data.ItemFileReadStore创建Dojo折线图。我使用DataSeries构造函数的第三个参数(值)来指定将在图表上生成点的方法。例如使用dojox.charting.DataSeries时添加x轴标签

function formatLineGraphItem(store,item) 
{ 
    var o = { 
     x: graphIndex++, 
     y: store.getValue(item, "fileSize"), 
    }; 
    return o; 
} 

graphIndex是一个整数,对每个fileSize值递增。这给了我一个折线图,其中显示了fileSize和数字数。这工作正常。

我想要的是能够指定使用x轴标签而不是graphIndex的值,即底层数据仍然是1,2,3,4,但标签将显示文本(在这种情况下文件大小被捕获的时间)。

当我调用chart.addAxis()时,我可以通过将标签数组传递给x asis来做到这一点,但这需要我在遍历数据之前知道这些值。例如

var dataSeriesConfig = {query: {id: "*"}}; 
var xAxisLabels = [{text:"2011-11-20",value:1},{text:"2011-11-21",value:2},{text:"2011-11-22",value:3}]; 

var chart1 = new dojox.charting.Chart("chart1"); 
chart1.addPlot("default", {type: "Lines", tension: "4"}); 
chart1.addAxis("x", {labels: xAxisLabels}); 
chart1.addAxis("y", {vertical: true}); 
chart1.addSeries("Values", new dojox.charting.DataSeries(dataStore, dataSeriesConfig, formatLineGraphItem)); 
chart1.render(); 

的xAxisLabels阵列可以通过preparsing的dataSeries被创建,但它周围不是一个很不错的工作。

有没有人有任何想法如何扩展formatLineGraphItem方法来提供x轴标签。还是没有人有任何关于o可以包含的对象的值的文档?

在此先感谢!

回答

2

这将需要一个unix时间戳,将该值乘以1000(以便JavaScript具有微秒,然后将该值传递给dojo日期以格式化)。 你不应该有任何问题编辑这个你需要的格式。

您提供了例子说明您的日期类似于“1”,“2”,“3”,这显然是错误的。那些不是日期..所以这是你可以做的最好的,除非你编辑你的问题。

chart1.addAxis("x",{ 
      labelFunc: function(n){    
       if(isNaN(dojo.number.parse(n)) || dojo.number.parse(n) % 1 != 0){ 
        return " "; 
       } 
       else { 
        // I am assuming that your timestamp needs to be multiplied by 1000. 
        var date = new Date(dojo.number.parse(n) * 1000); 
        return dojo.date.locale.format(date, { 
         selector: "date", 
         datePattern: "dd MMMM", 
         locale: "en" 
        }); 
       } 
      }, 
      maxLabelSize: 100 
     } 
+0

嗨,谢谢你的快速回复。我已经将时间值格式化为文本(在商店内),我想将其应用于标签。我使用了一系列数字,以便我的点以固定间隔出现(因为我的时间不会总是连续的几天)。使用原始毫秒值会导致值之间的较大差距。 – Mudged