【问题标题】:Meteor, where to put d3 code?流星,d3代码放哪里?
【发布时间】:2015-01-11 12:08:18
【问题描述】:

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

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

我想在 dom 完全渲染后运行 d3,并且该函数可以访问 data 函数的结果。我尝试使用挂钩 onAfterAction,但似乎此函数无法访问数据。我也尝试使用 Template..rendered,正如 stackoverflow 中的其他一些帖子所说。但是,渲染的函数似乎只运行一次,并且在数据发生变化时不会重新运行。我将渲染函数放在 Tracker.autorun 函数中,但它仍然只运行一次。

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

谢谢。

【问题讨论】:

    标签: d3.js meteor iron-router


    【解决方案1】:

    您应该将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末尾。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-11-21
      • 2015-10-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-19
      • 2013-06-24
      相关资源
      最近更新 更多