如何在Meteor中为nvd3访问Template.rendered中的订阅

时间:2016-04-12 17:31:06

标签: javascript meteor d3.js nvd3.js meteor-blaze

我想使用简单的nvd3 discrete bar chart显示集合中的数据。

当我尝试使用本地收藏时,它工作得很好。 现在我将相同的数据转移到db集合,但我无法获取Meteor的.render中的数据。

Template.chartPopularWordsAll.onCreated(() => {
    let template = Template.instance();
    template.autorun(() => {
        template.subscribe('dataViewed'); // DataViewed.find()
});

Template.chartPopularWordsAll.rendered = function() {
    let data = DataViewed.find({}, {
        limit: 5,
        sort: {
            timesViewed: -1
        }
    }).fetch();

    console.log(data); // <-- this returns an empty array
}

问题:如何访问.rendered中的数据?

在Meteor文档中搜索'.rendered'没有结果我只能找到.onRendered。 。甚至是最新的还是被弃用了?

提前致谢!

莫夫

1 个答案:

答案 0 :(得分:1)

我认为这里的问题是混淆自动运行订阅和提取:

当数据发生变化时会运行自动运行,因此它不是需要在自动运行中进行的预订,而是数据查找。

试试这个:

Template.chartPopularWordsAll.onCreated(() => {
    let template = Template.instance();
    template.subscribe('dataViewed'); // DataViewed.find()
});

Template.chartPopularWordsAll.rendered = function() {
  template.autorun(() => {
    let data = DataViewed.find({}, {
        limit: 5,
        sort: {
            timesViewed: -1
        }
    }).fetch();

    console.log(data); // 
  }
}

如果这不起作用,请尝试不取回对数据的调用,但是在需要数据时获取:Collection.find()为您提供了一个被动的游标,但是一旦你获取了一个数组,这不是被动的。 Collection.find()部分&#39;应该&#39;在自动运行中被反应,但我不是100%肯定。