使用Tracker.autorun监控限制更改,但不监控新帖子

时间:2015-07-23 23:32:32

标签: meteor

我想用

// client
var limit = Session.get('postsLimit');
Tracker.autorun(function (c) {
     Meteor.subcribe('posts', limit);
     c.stop();
});

// server
Meteor.publish('posts', function (limit) {
     return Posts.find({}, {limit: limit});
});

因为我不想在查看用户首次访问该页面时加载的帖子时插入新帖子以影响用户的体验。但与此同时,我希望跟踪器仍能识别限制更改,以便在用户滚动时加载帖子。换句话说,我希望跟踪器在初始加载后停止订阅全新帖子,但仍然加载已经创建的帖子。 我如何使用Tracker或者跟踪器不是最佳选择?

2 个答案:

答案 0 :(得分:0)

您可以创建仅限客户端的集合,将帖子插入其中并使助手返回本地集合。 使用observeChanges观看新添加的帖子,当有新帖子时,向用户显示相应的消息。当用户想要查看新帖子时,请将它们添加到仅客户端集合中。

答案 1 :(得分:0)

这个怎么样:

//client.js
var now = new Date(); //so the now never change
Tracker.autorun(function (c) {
   Meteor.subscribe('posts', now,  Session.get('postsLimit'));
});


//server.js
Meteor.publish('posts',function(time,limit){
  return Posts.find({savedAt: {$lt: time}},{limit:limit});
});

因此,当每个帖子都保存到数据库中时,还会附加savedAt字段,查询只会搜索当前时间之前保存的字段。

而不是使用var now = new Date();您也可以使用Session.get('now'),然后当用户决定提取所有新内容时,您可以稍后通过Session.set('now',new Date)进行更改。

但是必须要注意客户端和服务器之间的时间差异,可能需要同步它们吗?