为什么当只显示一个数据点时,jqPlot的DateAxisRenderer会崩溃?

9

我发现了一个与jqPlot相关的边角案例,它会导致整个页面的Javascript“崩溃”(无限期停止)。当我在折线图中使用DateAxisRenderer并且只有一个数值时,就会发生这种情况:

(function() {
  $(function() {
    var data, now, plot1;
    now = new Date;
    // single data point in the series:
    data = [[now, 1]];
    return plot1 = $.jqplot("plotTarget", [data], {
      axes: {
        xaxis: {
          // if I remove this renderer, the "crash" does not happen:
          renderer: $.jqplot.DateAxisRenderer
        }
      }
    });
  });
}).call(this);

为什么会发生这种情况?是jqPlot的bug还是我做错了什么?
同时注意到:如果我在系列中添加更多与相同日期相关的值,同样的问题会发生。如果我添加更多与不同日期相关的值,问题就不存在了。
我使用的是jQuery v1.6.4、jqPlot v1.0.0b2_r1012,并在Firefox 8.0.1上进行渲染。

1
目前有一个非官方的修复程序可解决这个 bug,位于 https://bitbucket.org/tomasc/jqplot/changeset/42d2445cdd45,但您必须要么克隆存储库,要么手动复制更改。 - Kryptic
2个回答

6

查看DateAxisRenderer代码,我们可以发现该插件试图计算最小值和最大值来确定刻度。这暗示作者认为系列至少由两个数据点组成。但是文档中没有说明,代码也没有检查,所以导致了插件的“崩溃”。

在jqplot Bugtracking列表中已经有人报告了这个bug(于2012年1月21日4天前)。


1

今天我也遇到了这个问题,让我惊讶的是相同的代码在我使用Bitbucket中的脚本时在jsfiddle上运行良好。

我正在使用ASP.NET MVC中的jqplot,并使用nuget扩展下载了jqplot脚本,结果发现该扩展程序已经下载了旧版本的jqplot,导致了问题。

因此,简单地将我的旧DateAxisRender.js更改为此处的新更新版本即可解决我的问题,或者您也可以从此页面下载最新版本。

我在jsfiddle上创建了一个演示


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接