我使用meteor,iron-router和d3。 d3用于根据数据反应显示饼图,我在铁路由器的数据函数中计算。所以,我希望d3在dom到位时运行。
但是,我不知道应该把d3代码放在哪里。我曾经把它放在我生成数据的数据函数中。但是,有时在dom未就绪时计算数据函数(因此d3无法绘制图表)。
我想在dom完全呈现后运行d3,并且该函数可以访问数据函数的结果。我试图使用挂钩onAfterAction,但似乎这个函数无法访问数据。我也尝试使用Template.rendered,就像stackoverflow中的其他帖子所说的那样。但是,渲染的函数似乎只运行一次,并且在数据更改时它不会重新运行。我把渲染的函数放在Tracker.autorun函数中,但它仍然只运行一次。
那么,有没有可以反复运行d3代码的地方,可以访问渲染的dom以及数据字段?
感谢。
答案 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的结尾。