流星,在哪里放d3代码?

Fei*_*Fei 2 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以及数据字段?

谢谢.

Dav*_*don 5

您应该使用onRendered回调和模板自动运行.开箱即用不起作用1.0,但有一个技巧 - 你可以通过使用Template.currentData这样在上下文更改后重新运行自动运行:

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

有关更多详细信息,请参阅此问题的结尾.