如何显示好的订阅?流星JS

时间:2014-03-20 14:42:22

标签: meteor

我遇到了一个小小的订阅问题,在必要的时候不会停止。

上下文:

我有一个推文集合,我通过发布/订阅过程显示给我的客户端。 这是我的出版物:

Meteor.publish('tweets', function(params) {
    return Tweets.find({hashtag: params});
});

你可以看到我有一个标签来对它们进行排序,并且只显示带有指定hastag的推文。 这是我的订阅客户端代码:

var sub;
Template.hashtagPage.rendered = function() {
    // Get the hashtag of the current page
    hashtag = document.getElementById('hashtag').innerHTML; 
    sub = Meteor.subscribe('tweets', hashtag);
};

Template.hashtagPage.destroyed = function(){
    sub.stop();
};

在我的模板中,我会显示订阅中的每条推文。我为显示推文的每个页面都获得了相同的模板。

但这是我的问题。当我第一次去显示带有#strong> #first 主题标签的推文的页面时,我会毫无问题地得到它们。但是,如果接下来我转到显示带有#strong> #second 主题标签的推文的页面,我的客户端会使用#strong> #first 和 #second

我在想什么

通常,订阅上的.stop()应该从客户端的缓存中删除订阅数据(docs.meteor.com/#meteor_subscribe)。但我没有。我试图改变sub.stop()的位置。当它与订阅在同一模板函数上时,它可以工作,但是,不会显示任何推文。

如何停止订阅仅在我的客户端页面中显示带有良好主题标签的商品推文?

提前致谢

2 个答案:

答案 0 :(得分:0)

更标准的方法是将订阅参数设置为Session变量,并使用Deps.autorun()启动和停止相应的订阅。

在渲染的函数中:

Session.set( "hashTag", hashTag);

在顶级客户端代码中:

Deps.autorun( function(){
   Meteor.subscribe( 'tweets', Session.get("hashTag") );
});

当Session变量更新时,自动运行功能将在旧订阅句柄上调用stop。这在docs for subscribe中提到。

如果您确实希望自己管理启动和停止订阅,请确保每个订阅句柄都存储在自己的变量中,例如subHandles[ hashTag ],否则您可能会在调用stop之前覆盖所需的句柄。< / p>

答案 1 :(得分:-1)

使用会话变量。一旦设置完成,您就不必重新运行订阅。从流星到救援的反应变量。

Template.hashtagPage.rendered = function() { // Get the hashtag of the current page Meteor.subscribe('tweets', Session.get('hashtag')); };

Template.hashtagPage.events { 'blur #hashtag': function(event) { Session.set('hashtag', event.target.val()); } };

通常情况下,我会将订阅放入路线(使用铁路由器)和waitOn