在Meteor中的会话期间更新订阅数据

时间:2015-12-13 16:20:35

标签: javascript meteor

我正在尝试更新传递给Meteor中的subscribe参数的id - 简而言之,我想订阅当前url中具有id的Collection对象。我可以在第一次加载时发生这种情况,但是在创建新对象并且用户在其会话中路由到该新对象时不会发生这种情况。

我能够模糊地工作的唯一方法是使用setInterval进行黑客攻击 - 我不知道,所以我正在寻找正确的流星方式。

目前publications.js中的server是:

Meteor.publish('shares', function(id){
 return Shares.find({_id:id});
});

router.js

Router.route('/share-social/:_id', {
 name: 'shareSocial',
 data: function() { return Shares.findOne(this.params._id); }
});

并通过main.js中的client订阅:(即,在网址中获取ID,并订阅该网址)

setInterval(function(){
 var x = location.href.split('/');
 var id = x.slice(-1).pop();
 Meteor.subscribe('shares', id);
}, 100);

最后是模板助手:

Template.shareSocial.helpers({
  shares: function() {
   return Shares.find().fetch();
 }
});

以上显然存在问题。如何仅对具有当前URL中显示的id的对象进行反应性订阅,无论它是在同一会话还是新会话中?

谢谢!

1 个答案:

答案 0 :(得分:0)

您可以通过定义Session变量的当前ID来为您的订阅设置反应源,而不是从URL中分割id,例如:

// router.js
Router.route('/share-social/:_id', function() {
    Session.set('id', this.params._id);
    this.render('shareSocial');
});

// main.js
Tracker.autorun(function() {
    Meteor.subscribe('shares', Session.get('id'));
});

现在,每次更改路径的ID时,会更新Session变量和订阅。