Javascript DojoToolkit:dojox.charting.DataSeries,如何连接到数据刷新事件?

Javascript DojoToolkit:dojox.charting.DataSeries,如何连接到数据刷新事件?,javascript,events,dojo,dojox.charting,Javascript,Events,Dojo,Dojox.charting,我不熟悉JavaScript和Dojo,所以请耐心听我说。我正在尝试使用DataSeries对象创建饼图,如下所示: var skillStore = new dojo.data.ItemFileReadStore({ url: "/data/skillhead.json" }); function formatPieChartData(store, item) { var tooltips = { AVAILABLE: "Available agents", ON

我不熟悉JavaScript和Dojo,所以请耐心听我说。我正在尝试使用DataSeries对象创建饼图,如下所示:

var skillStore = new dojo.data.ItemFileReadStore({
    url: "/data/skillhead.json"
});

function formatPieChartData(store, item) {
  var tooltips = {
    AVAILABLE: "Available agents",
    ONACD: "Agents on ACD calls",
    INACW: "Agents in ACW",
    INAUX: "Agents in AUX",
    AGINRING: "Agents with ringing phones",
    OTHER: "Agents otherwise occupied",
  };

  var ivalue = store.getValue(item, "value");
  var legend = store.getValue(item, "legend");
  var tooltip = tooltips[store.getValue(item, "field")];

  var o = { y: ivalue, legend: legend, tooltip: tooltip }
  return o;
}

/* This is how the data looks like after massaging
var chartData = [
    { y: 10, legend: "AVAIL", tooltip: "Available agents" },
    { y: 20, legend: "ONACD", tooltip: "Agents on ACD calls" },
    { y: 30, legend: "INACW", tooltip: "Agents in ACW" },
    { y: 40, legend: "INAUX", tooltip: "Agents in AUX" },
    { y: 50, legend: "INRING", tooltip: "Agents with ringing phones" },
    { y: 60, legend: "OTHER", tooltip: "Agents otherwise occupied" }
];
 */

var series = new dojox.charting.DataSeries(skillStore,
    { query: {
        field: new RegExp("INACW|INAUX|AGINRING|OTHER|" +
                  "AVAILABLE|ONACD")
    } },
    formatPieChartData);

dojo.addOnLoad( function() {

chart = new dojox.charting.Chart("chartNode");
chart.setTheme(dojox.charting.themes.PrimaryColors);

chart.addPlot("default", {
    type: "Pie",
    radius: 85,
    labels: false,
    ticks: false,
    markers: false
});
chart.addSeries("default", series);

var highlight = new dojox.charting.action2d.Highlight(chart, "default");
var tip = new dojox.charting.action2d.Tooltip(chart, "default");

grid.startup();
chart.render();

legend = new dojox.charting.widget.Legend({
        chart: chart,
        horizontal: false,
        style: "font-size: 11px;",
        },
        "chartLegend");
legend.startup();

setTimeout(function(){ legend.refresh() }, 1000);
});

它工作正常,除了一件事:我不喜欢固定超时。数据加载后我必须刷新图例,否则不显示;但是,我不知道在获取数据之后,为了刷新图例,要附加到哪个事件。我看到DataSeries类有onFetchError事件,但没有onFetchSuccess事件。我如何知道数据已成功加载?

我知道这很晚了,但我还是会发布它,以防有人遇到同样的问题。我查看了DataSeries.js,发现它们使用了一个未记录的钩子。我不能保证在整个api更新过程中都会保持不变,它看起来像:

dojo.connect(dataSeries, "_onFetchComplete", myObj, "myFunction");

谢谢。我无法证实你是对还是错;我已经决定在我的项目中不使用Dojo。不用担心。我能问一下你用的是什么吗?Dojo在绘制大型数据集时有一些限制,我选择了ExtJS。到目前为止,我对它的印象很好;它也有它的缺点和很多bug,但对我来说,它比Dojo有三个主要优势:a)文档集,无论多么不完整,都比Dojo几乎不存在的文档要好得多。b) ExtJS开发人员努力提供该库的真实调试版本,并且它是可用的——完全不同于Dojo,Dojo的核心是一碗意大利面条。我可以并且确实可以通过进入核心库并在其中导航来调试自己的代码。c) (几乎)干净的MVC架构。这真的很有效。