如何在呈现之前获取所有订阅数据,然后在收到新数据时更新dom?

时间:2016-04-27 17:07:56

标签: meteor collections publish-subscribe

我目前有一个小部件,它通过订阅从数据库中获取数百个文档,然后继续侦听新文档,因此它可以更新股票图表。

有一个问题很严重,每次更新数据时图表都会更新,这会导致重绘。

这是一个问题,因为它在开始时调用重绘数百次甚至很难,只需要“获取所有数据然后绘制并等待更新”,更新将不会经常发生,所以那就没关系重绘。

我目前的代码:

Template.nwidget.onRendered(function() {
  return this.autorun(function() {
    var data;
    data = {};
    data = Data.find({
      type: 'my_type'
    });
    data = data.fetch();
    return update(data);
  });
});

1 个答案:

答案 0 :(得分:3)

在数据订阅之后做一些事情你可以这样做:

Meteor.subscribe( 'collection', {
    onStop:  function( error /* optional */ ) {
        // when the sub terminates for any reason,
        // with an error argument if an error triggered the stop
    },
    onReady: function() {
        // when ready
    }
});

如果您想在数据描述后呈现页面,那么您可以在路由器中添加waitOn。

还有一种方法可以检查订阅的准备情况。如果订阅尚未准备好,您可以显示其他内容,例如加载屏幕。

var handle = Meteor.subscribe( 'collection');

Tracker.autorun(function() {
  if (handle.ready())
      //write whatever you want to do here.
});

对于视图中的自动更新,您可以将日期存储在反应性事物中,它可能是反应性变量,会话或集合。 然后你可以从帮助器返回值来查看。这将自动更新您的视图。