流星,在哪里放d3代码?

时间:2014-11-14 06:33:33

标签: d3.js meteor iron-router

我使用meteor,iron-router和d3。 d3用于根据数据反应显示饼图,我在铁路由器的数据函数中计算。所以,我希望d3在dom到位时运行。

但是,我不知道应该把d3代码放在哪里。我曾经把它放在我生成数据的数据函数中。但是,有时在dom未就绪时计算数据函数(因此d3无法绘制图表)。

我想在dom完全呈现后运行d3,并且该函数可以访问数据函数的结果。我试图使用挂钩onAfterAction,但似乎这个函数无法访问数据。我也尝试使用Template.rendered,就像stackoverflow中的其他帖子所说的那样。但是,渲染的函数似乎只运行一次,并且在数据更改时它不会重新运行。我把渲染的函数放在Tracker.autorun函数中,但它仍然只运行一次。

那么,有没有可以反复运行d3代码的地方,可以访问渲染的dom以及数据字段?

感谢。

1 个答案:

答案 0 :(得分:5)

您应该使用onRendered使用template autorun回调。开箱即用的1.0无法使用,但是有一个技巧 - 你可以通过使用Template.currentData来改变上下文后重新运行:

Template.myPictures.onRendered(function () {
  this.autorun(function () {
    var data = Template.currentData();
    // use data with d3 here
  });
});

有关详细信息,请参阅this issue的结尾。